How to get time of collision?

andrewaah
Posts: 6
Joined: Tue Sep 25, 2007 1:56 pm

How to get time of collision?

Post by andrewaah »

I'm trying to get to get the time at which two spheres collide, but the api keeps returning 1 as the time of collision, even though my timesteps are 1.0f/60.0f.

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);
and my defaultNearCallback that I copied from the link above

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);
}

thanks.