I currently have set up a simple btCollisionWorld:
Code: Select all
collisionConfiguration = new btDefaultCollisionConfiguration();
dispatcher = new btCollisionDispatcher(collisionConfiguration);
dispatcher->registerCollisionCreateFunc(GIMPACT_SHAPE_PROXYTYPE, GIMPACT_SHAPE_PROXYTYPE, new btBoxBoxCollisionAlgorithm::CreateFunc);
broadphase = new btDbvtBroadphase();
collisionWorld = new btCollisionWorld(dispatcher, broadphase, collisionConfiguration);
Code: Select all
uBasis.setIdentity();
pCollisionObject->getWorldTransform().setBasis(uBasis);
pCollisionObject->getWorldTransform().setIdentity();
pCollisionObject->getWorldTransform().setOrigin(btVector3(0, 0, 0));
pCollisionObject->setCollisionShape(pCollisionShape);
collisionWorld->addCollisionObject(pCollisionObject);
Code: Select all
if (collisionWorld) {
collisionWorld->performDiscreteCollisionDetection();
int numManifolds = collisionWorld->getDispatcher()->getNumManifolds();
//s_printf("%i collisions\n", numManifolds);
for (int i=0; i<numManifolds; i++) {
btPersistentManifold *contactManifold = collisionWorld->getDispatcher()->getManifoldByIndexInternal(i);
CollisionEvent *pNewCollision = new CollisionEvent(contactManifold);
m_uCollisionEventList.push_back(pNewCollision);
}
}
Code: Select all
void PhysicsManager::setCollisionShapeRotation(unsigned int _nId, gmtl::Vec3f _nAxis, float _nAngle)
{
btCollisionObject *pObject = getCollisionObject(_nId);
btVector3 nAxis = btVector3(_nAxis[gmtl::Xelt], _nAxis[gmtl::Yelt], _nAxis[gmtl::Zelt]);
newRotation.setRotation(nAxis, (btScalar)_nAngle);
pObject->getWorldTransform().setRotation(newRotation);
}