This commit is contained in:
ejcoumans
2006-11-14 05:09:11 +00:00
parent 133a7dda99
commit be175e888e
9 changed files with 86 additions and 15 deletions

View File

@@ -121,13 +121,13 @@ void btCollisionWorld::addCollisionObject(btCollisionObject* collisionObject,sho
}
void btCollisionWorld::performDiscreteCollisionDetection()
void btCollisionWorld::performDiscreteCollisionDetection(btDispatcherInfo& dispatchInfo)
{
BEGIN_PROFILE("performDiscreteCollisionDetection");
btDispatcherInfo dispatchInfo;
dispatchInfo.m_timeStep = 0.f;
dispatchInfo.m_stepCount = 0;
//update aabb (of all moved objects)

View File

@@ -236,8 +236,8 @@ public:
void removeCollisionObject(btCollisionObject* collisionObject);
virtual void performDiscreteCollisionDetection();
virtual void performDiscreteCollisionDetection( btDispatcherInfo& dispatchInfo);
};

View File

@@ -39,6 +39,10 @@ subject to the following restrictions:
#include "BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.h"
#ifdef USE_BT_GJKEPA
#include "BulletCollision/NarrowPhaseCollision/btGjkEpa.h"
#endif //USE_BT_GJKEPA
//#include "NarrowPhaseCollision/EpaPenetrationDepthSolver.h"
#ifdef WIN32
@@ -155,6 +159,26 @@ void btConvexConvexAlgorithm ::processCollision (btCollisionObject* body0,btColl
}
#ifdef USE_BT_GJKEPA
btVector3 witnesses[2];
btVector3 normal(0,0,0);
btScalar depth(0);
btConvexShape* shape0(static_cast<btConvexShape*>(body0->getCollisionShape()));
btConvexShape* shape1(static_cast<btConvexShape*>(body1->getCollisionShape()));
const btScalar margin(shape0->getMargin()+shape1->getMargin());
resultOut->setPersistentManifold(m_manifoldPtr);
if(btGjkEpaSolver::Collide( shape0,body0->getWorldTransform(),
shape1,body1->getWorldTransform(),
shape0->getMargin(),shape1->getMargin(),
witnesses,normal,depth))
{
//optional: draw the contact+normal
//dispatchInfo.m_debugDraw->drawLine(witnesses[1],witnesses[1]+normal,btVector3(255,0,0));
resultOut->addContactPoint(normal,witnesses[1],-depth);
}
#else
checkPenetrationDepthSolver();
btConvexShape* min0 = static_cast<btConvexShape*>(body0->getCollisionShape());
@@ -175,6 +199,7 @@ void btConvexConvexAlgorithm ::processCollision (btCollisionObject* body0,btColl
resultOut->setPersistentManifold(m_manifoldPtr);
m_gjkPairDetector.getClosestPoints(input,*resultOut,dispatchInfo.m_debugDraw);
#endif
}

View File

@@ -267,8 +267,14 @@ void btDiscreteDynamicsWorld::internalSingleStepSimulation(float timeStep)
///apply gravity, predict motion
predictUnconstraintMotion(timeStep);
btDispatcherInfo dispatchInfo;
dispatchInfo.m_timeStep = timeStep;
dispatchInfo.m_stepCount = 0;
dispatchInfo.m_debugDraw = getDebugDrawer();
///perform collision detection
performDiscreteCollisionDetection();
performDiscreteCollisionDetection(dispatchInfo);
calculateSimulationIslands();

View File

@@ -52,8 +52,13 @@ int btSimpleDynamicsWorld::stepSimulation( float timeStep,int maxSubSteps, floa
///apply gravity, predict motion
predictUnconstraintMotion(timeStep);
btDispatcherInfo dispatchInfo;
dispatchInfo.m_timeStep = timeStep;
dispatchInfo.m_stepCount = 0;
dispatchInfo.m_debugDraw = getDebugDrawer();
///perform collision detection
performDiscreteCollisionDetection();
performDiscreteCollisionDetection(dispatchInfo );
///solve contact constraints
int numManifolds = m_dispatcher1->getNumManifolds();