I'm using the code from here
http://bulletphysics.com/Bullet/phpBB3/ ... 761&p=2689
I believe I'm using continuous collision detection, heres my init code
Code: Select all
dispatcher = new btCollisionDispatcher(collisionConfiguration);
pairCache = new btAxisSweep3(btVector3(-1000,-1000,-1000),btVector3(1000,1000,1000));
constraintSolver = new btSequentialImpulseConstraintSolver();
m_dynamicsWorld = new btContinuousDynamicsWorld(dispatcher,pairCache,constraintSolver,collisionConfiguration);
m_dynamicsWorld->setGravity(btVector3(0,0,0));
dispatcher->registerCollisionCreateFunc(SPHERE_SHAPE_PROXYTYPE,SPHERE_SHAPE_PROXYTYPE, new btSphereSphereCollisionAlgorithm::CreateFunc);
dispatcher->setNearCallback(defaultNearCallback);
Code: Select all
void Physic::defaultNearCallback(btBroadphasePair& collisionPair, btCollisionDispatcher& dispatcher, btDispatcherInfo& dispatchInfo) {
btCollisionObject* colObj0 = (btCollisionObject*)collisionPair.m_pProxy0->m_clientObject;
btCollisionObject* colObj1 = (btCollisionObject*)collisionPair.m_pProxy1->m_clientObject;
if (dispatcher.needsCollision(colObj0,colObj1))
{
//dispatcher will keep algorithms persistent in the collision pair
if (!collisionPair.m_algorithm)
{
collisionPair.m_algorithm = dispatcher.findAlgorithm(colObj0,colObj1);
}
if (collisionPair.m_algorithm)
{
btManifoldResult contactPointResult(colObj0,colObj1);
if (dispatchInfo.m_dispatchFunc == btDispatcherInfo::DISPATCH_DISCRETE)
{
//discrete collision detection query
collisionPair.m_algorithm->processCollision(colObj0,colObj1,dispatchInfo,&contactPointResult);
} else {
//continuous collision detection query, time of impact (toi)
float toi = collisionPair.m_algorithm->calculateTimeOfImpact(colObj0,colObj1,dispatchInfo,&contactPointResult);
if (dispatchInfo.m_timeOfImpact > toi) {
dispatchInfo.m_timeOfImpact = toi;
}
std::stringstream ss;
ss << toi << std::endl;
OutputDebugString(ss.str().c_str());
}
}
}
//instance->dispatcher->defaultNearCallback(collisionPair, dispatcher, dispatchInfo);
}