added some debugging variable for CCD motion clamping

This commit is contained in:
erwin.coumans
2008-09-11 18:44:30 +00:00
parent 732745d06c
commit 569946a96f
2 changed files with 17 additions and 0 deletions

View File

@@ -39,8 +39,11 @@ btTransform startTransforms[maxNumObjects];
btCollisionShape* gShapePtr[maxNumObjects];//1 rigidbody has 1 shape (no re-use of shapes) btCollisionShape* gShapePtr[maxNumObjects];//1 rigidbody has 1 shape (no re-use of shapes)
#define SHOW_NUM_DEEP_PENETRATIONS 1 #define SHOW_NUM_DEEP_PENETRATIONS 1
extern int gNumClampedCcdMotions;
#ifdef SHOW_NUM_DEEP_PENETRATIONS #ifdef SHOW_NUM_DEEP_PENETRATIONS
extern int gNumDeepPenetrationChecks; extern int gNumDeepPenetrationChecks;
extern int gNumSplitImpulseRecoveries; extern int gNumSplitImpulseRecoveries;
extern int gNumGjkChecks; extern int gNumGjkChecks;
extern int gNumAlignedAllocs; extern int gNumAlignedAllocs;
@@ -541,6 +544,9 @@ void DemoApplication::shootBox(const btVector3& destination)
body->getWorldTransform().setRotation(btQuaternion(0,0,0,1)); body->getWorldTransform().setRotation(btQuaternion(0,0,0,1));
body->setLinearVelocity(linVel); body->setLinearVelocity(linVel);
body->setAngularVelocity(btVector3(0,0,0)); body->setAngularVelocity(btVector3(0,0,0));
body->setCcdSquareMotionThreshold(3600);//1600);//40ms/sec for 60 hertz gives 0.66 m/frame. 40*40=1600
body->setCcdSweptSphereRadius(0.2f);
} }
} }
@@ -1155,6 +1161,11 @@ void DemoApplication::renderme()
BMF_DrawString(BMF_GetFont(BMF_kHelvetica10),buf); BMF_DrawString(BMF_GetFont(BMF_kHelvetica10),buf);
yStart += yIncr; yStart += yIncr;
glRasterPos3f(xOffset,yStart,0);
sprintf(buf,"gNumClampedCcdMotions = %d",gNumClampedCcdMotions);
BMF_DrawString(BMF_GetFont(BMF_kHelvetica10),buf);
yStart += yIncr;
glRasterPos3f(xOffset,yStart,0); glRasterPos3f(xOffset,yStart,0);
sprintf(buf,"gNumSplitImpulseRecoveries= %d",gNumSplitImpulseRecoveries); sprintf(buf,"gNumSplitImpulseRecoveries= %d",gNumSplitImpulseRecoveries);
BMF_DrawString(BMF_GetFont(BMF_kHelvetica10),buf); BMF_DrawString(BMF_GetFont(BMF_kHelvetica10),buf);
@@ -1218,6 +1229,7 @@ void DemoApplication::clientResetScene()
gNumGjkChecks = 0; gNumGjkChecks = 0;
#endif //SHOW_NUM_DEEP_PENETRATIONS #endif //SHOW_NUM_DEEP_PENETRATIONS
gNumClampedCcdMotions = 0;
int numObjects = 0; int numObjects = 0;
if (m_dynamicsWorld) if (m_dynamicsWorld)
{ {

View File

@@ -707,6 +707,7 @@ void btDiscreteDynamicsWorld::calculateSimulationIslands()
} }
#include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h" #include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h"
class btClosestNotMeConvexResultCallback : public btCollisionWorld::ClosestConvexResultCallback class btClosestNotMeConvexResultCallback : public btCollisionWorld::ClosestConvexResultCallback
@@ -775,6 +776,9 @@ public:
}; };
///internal debugging variable. this value shouldn't be too high
int gNumClampedCcdMotions=0;
//#include "stdio.h" //#include "stdio.h"
void btDiscreteDynamicsWorld::integrateTransforms(btScalar timeStep) void btDiscreteDynamicsWorld::integrateTransforms(btScalar timeStep)
{ {
@@ -796,6 +800,7 @@ void btDiscreteDynamicsWorld::integrateTransforms(btScalar timeStep)
BT_PROFILE("CCD motion clamping"); BT_PROFILE("CCD motion clamping");
if (body->getCollisionShape()->isConvex()) if (body->getCollisionShape()->isConvex())
{ {
gNumClampedCcdMotions++;
body->predictIntegratedTransform(timeStep, predictedTrans); body->predictIntegratedTransform(timeStep, predictedTrans);
btClosestNotMeConvexResultCallback sweepResults(body,body->getWorldTransform().getOrigin(),predictedTrans.getOrigin(),getBroadphase()->getOverlappingPairCache()); btClosestNotMeConvexResultCallback sweepResults(body,body->getWorldTransform().getOrigin(),predictedTrans.getOrigin(),getBroadphase()->getOverlappingPairCache());
btConvexShape* convexShape = static_cast<btConvexShape*>(body->getCollisionShape()); btConvexShape* convexShape = static_cast<btConvexShape*>(body->getCollisionShape());