Bullet 2.38 release: btNearCallback

Open source Bullet Physics SDK release information
Post Reply
User avatar
Erwin Coumans
Site Admin
Posts: 4221
Joined: Sun Jun 26, 2005 6:43 pm
Location: California, USA
Contact:

Bullet 2.38 release: btNearCallback

Post by Erwin Coumans »

Bullet 2.38 is released.

Similar to Open Dynamics Engine, Bullet 2.38 provides the option of a collision detection nearCallback. Main differences with ODE are:
- unlike ODE, this is optional: by default Bullet uses its built-in defaultNearCallback
- continuous collision detection (time of impact) next to discrete
- contact points are persistent and incrementally added/removed/maintained

See example in CcdPhysicsDemo how to register your own custom nearCallback. This can be useful to have more control over the collision detection pipeline:

Code: Select all

//by default, Bullet will use its own nearcallback, but you can override it using dispatcher->setNearCallback()
void customNearCallback(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;

				}
			}
		}

}

Other additions toBullet 2.38:

- an optional angularFactor scalar in btRigidBody, which allows to diminish/completely remove angular impulses. This can be handy for character control and cars. When you hit a wall, it won't fully get the rotational impact.
- bool btRigidBody::isInWorld(), which returns true is the btRigidBody is currently in a btCollisionWorld/btDynamicsWorld derived class.

Download at http://www.continuousphysics.com/mediaw ... e=Download
Enjoy!
Erwin
Post Reply