|
|
@@ -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
|
|
|
}
|
|
|
}
|