I am using Bullet just for collision detection and this article seemed to do exactly what I need: just detect if two shapes collide.
http://www.bulletphysics.org/mediawiki- ... nformation
Here is my code:
Code: Select all
//collision world initialization
void GameSceneFrame::CreateWorld()
{
btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration();
btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration);
btVector3 worldAabbMin(-1000,-1000,-1000);
btVector3 worldAabbMax(1000,1000,1000);
btAxisSweep3* broadphase = new btAxisSweep3(worldAabbMin,worldAabbMax);
m_physicsWorld = new btCollisionWorld(dispatcher,broadphase,collisionConfiguration);
}
void GameSceneFrame::UpdateCollision()
{
m_physicsWorld->performDiscreteCollisionDetection();
int numManifolds = m_physicsWorld->getDispatcher()->getNumManifolds();
for (int i=0;i<numManifolds;i++)
{
btPersistentManifold* contactManifold = m_physicsWorld->getDispatcher()->getManifoldByIndexInternal(i);
btCollisionObject* obA = const_cast<btCollisionObject*>(contactManifold->getBody0());
btCollisionObject* obB = const_cast<btCollisionObject*>(contactManifold->getBody1());
btTransform aTransform = obA->getWorldTransform();
btTransform bTransform = obB->getWorldTransform();
btSphereShape * aShape = static_cast<btSphereShape*> (obA->getCollisionShape());
btSphereShape * bShape = static_cast<btSphereShape*> (obB->getCollisionShape());
float aRadius = aShape->getRadius();
float bRadius = bShape->getRadius();
btVector3 diff = aTransform.getOrigin() - bTransform.getOrigin();
float distance = diff.length();
if(distance > aRadius + bRadius)
{
printf("\n buggy collision");
}
contactManifold->clearManifold();
}
}
Cheers,