Im new to using bullet and have been reading through the user manual and wiki and looking at some of the demo source code. So far Im not sure how to exactly get things working... what Im try to do is detect a collision between a non-moving terrain and an airplane model that has a position and orientation. I only need to do collision detection and dont need to do anything physics related with forces or gravity. So if anyone can help me to figure out how to do this it would be appreciated.
Here is roughly how im currently trying to do things...
Creating the collision object:
Code: Select all
int numPoints = numVertices * 3;
// Setup the mesh
triangleMesh = new btTriangleMesh();
for (int i = 0; i < numPoints; i += 9)
{
btVector3 v0(vertices[i], vertices[i+1], vertices[i+2]);
btVector3 v1(vertices[i+3], vertices[i+4], vertices[i+5]);
btVector3 v2(vertices[i+6], vertices[i+7], vertices[i+8]);
// Add the triangle to the mesh
triangleMesh->addTriangle(v0,v1,v2);
}
collisionShape = new btBvhTriangleMeshShape(triangleMesh, true);
// Setup the collision object
btMatrix3x3 basis;
basis.setIdentity();
collisionObject = new btCollisionObject();
collisionObject->getWorldTransform().setBasis(basis);
collisionObject->setCollisionShape(collisionShape);
Code: Select all
collisionConfiguration = new btDefaultCollisionConfiguration();
collisionDispatcher = new btCollisionDispatcher(collisionConfiguration);
btVector3 worldAabbMin(-1000,-1000,-1000);
btVector3 worldAabbMax(1000,1000,1000);
broadphase = new btAxisSweep3(worldAabbMin, worldAabbMax);
collisionWorld = new btCollisionWorld(collisionDispatcher, broadphase, collisionConfiguration);
collisionWorld->addCollisionObject(environment.getCollisionObject());
collisionWorld->addCollisionObject(airplane.getCollisionObject());
Code: Select all
collisionWorld->performDiscreteCollisionDetection();
int numManifolds = collisionWorld->getDispatcher()->getNumManifolds();
for (int i=0; i<numManifolds; i++)
{
btPersistentManifold* contactManifold = collisionWorld->getDispatcher()->getManifoldByIndexInternal(i);
btCollisionObject* obA = static_cast<btCollisionObject*>(contactManifold->getBody0());
btCollisionObject* obB = static_cast<btCollisionObject*>(contactManifold->getBody1());
printf("manifolds = %d", numManifolds);
int numContacts = contactManifold->getNumContacts();
for (int j=0;j<numContacts;j++)
{
printf("contacts = %d", numContacts);
}
}
Code: Select all
collisionObject->getWorldTransform().setFromOpenGLMatrix(m);