Jelajahi Sumber

Bad collision

Jorrit Rouwe 9 jam lalu
induk
melakukan
414d3f32d7
1 mengubah file dengan 35 tambahan dan 5 penghapusan
  1. 35 5
      Samples/Tests/ConvexCollision/CapsuleVsBoxTest.cpp

+ 35 - 5
Samples/Tests/ConvexCollision/CapsuleVsBoxTest.cpp

@@ -12,6 +12,7 @@
 #include <Jolt/Physics/Collision/CollisionDispatch.h>
 #include <Jolt/Physics/Collision/CollisionCollectorImpl.h>
 #include <Utils/DebugRendererSP.h>
+#include <Jolt/Physics/Collision/CollideConvexVsTriangles.h>
 
 JPH_IMPLEMENT_RTTI_VIRTUAL(CapsuleVsBoxTest)
 {
@@ -20,6 +21,39 @@ JPH_IMPLEMENT_RTTI_VIRTUAL(CapsuleVsBoxTest)
 
 void CapsuleVsBoxTest::PrePhysicsUpdate(const PreUpdateParams &inParams)
 {
+	Vec3 inV0(-130.798187f, 7.53704834f, 0.00000000f);
+	Vec3 inV1(-130.798187f, 7.53704834f, 220.679504f);
+	Vec3 inV2(-125.651611f, 12.9696198f, 0.00000000f);
+
+	Ref capsule = new CapsuleShape(0.509999990f, 0.400000006f);
+
+	CollideShapeSettings settings;
+	settings.mMaxSeparationDistance=0.129999995f;
+
+	AllHitCollisionCollector<CollideShapeCollector> collector;
+
+	Mat44 transform(Vec4(0.953571558f, -1.79509136e-08f, -0.301166326f, 0.00000000f),
+	Vec4(-0.301166326f, -5.68373011e-08f, -0.953571618f, 0.00000000f),
+	Vec4(0.00000000f, 0.999999940f, 5.96046448e-08f, 0.939999998f),
+	Vec4(0.00000000f, 0.00000000f, 0.00000000f, 1.00000000f));
+	transform = transform.Transposed();
+
+	Mat44 transform2(
+	Vec4(0.917681158f, 0.397317618f, 0.00000000f, 117.061409f),
+	Vec4(-0.397317618f, 0.917681158f, -0.00000000f, -59.3419533f),
+	Vec4(-0.00000000f, 0.00000000f, 1.00000000f, -128.248947f),
+	Vec4(0.00000000f, 0.00000000f, 0.00000000f, 1.00000000f));
+	transform2 = transform2.Transposed();
+
+	CollideConvexVsTriangles col(capsule, Vec3::sOne(), Vec3::sOne(), transform, transform2, SubShapeID(), settings, collector);
+	col.Collide(inV0, inV1, inV2, 4, SubShapeID());
+
+	capsule->Draw(mDebugRenderer, RMat44(transform), Vec3::sOne(), Color::sWhite, false, false);
+	DebugRenderer::sInstance->DrawWireTriangle(RVec3(transform2 * inV0), RVec3(transform2 * inV1), RVec3(transform2 * inV2), Color::sYellow);
+
+
+
+	/*
 	// Create box
 	Vec3 box_min(-1.0f, -2.0f, 0.5f);
 	Vec3 box_max(2.0f, -0.5f, 3.0f);
@@ -50,6 +84,7 @@ void CapsuleVsBoxTest::PrePhysicsUpdate(const PreUpdateParams &inParams)
 	box_shape->Draw(mDebugRenderer, RMat44(box_transform), Vec3::sOne(), Color::sWhite, false, false);
 	capsule_shape->Draw(mDebugRenderer, RMat44(capsule_transform), Vec3::sOne(), Color::sWhite, false, false);
 #endif // JPH_DEBUG_RENDERER
+	*/
 
 	// Draw contact points
 	const CollideShapeResult &hit = collector.mHits[0];
@@ -63,10 +98,5 @@ void CapsuleVsBoxTest::PrePhysicsUpdate(const PreUpdateParams &inParams)
 	{
 		pen_axis *= hit.mPenetrationDepth / pen_axis_len;
 		DrawArrowSP(mDebugRenderer, hit.mContactPointOn2, hit.mContactPointOn2 + pen_axis, Color::sYellow, 0.01f);
-
-#ifdef JPH_DEBUG_RENDERER
-		Mat44 resolved_box = box_transform.PostTranslated(pen_axis);
-		box_shape->Draw(mDebugRenderer, RMat44(resolved_box), Vec3::sOne(), Color::sGreen, false, false);
-#endif // JPH_DEBUG_RENDERER
 	}
 }