I've got a tiny problem.
I have a btCollision world filled with btCollisionObjects which each have a Trimesh (at worst) as a btCollisionShape.
However after I call performDiscreteCollisionDetection on my world, the manifold stays empty.
Some code that might show the error:
Create world
Code: Select all
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);
btCollisionWorld * collisionWorld = new btCollisionWorld(dispatcher,broadphase,collisionConfiguration);
Code: Select all
btCollisionShape* cs = osgbBullet::btTriMeshCollisionShapeFromOSG( node );
btCollisionObject* co = new btCollisionObject();
co->setCollisionShape(cs);
collisionWorld->addCollisionObject( co );
Code: Select all
collisionWorld->performDiscreteCollisionDetection();
resultCallback = rCallBack;
collisionWorld->contactTest(collisionWorld->getCollisionObjectArray().at(0) ,resultCallback); //why is it that a single CollisionObject is required to use the generic contactTest?
int numManifolds = m_dynamicsWorld->getDispatcher()->getNumManifolds();
Code: Select all
struct rCallBack : public btCollisionWorld::ContactResultCallback
{
virtual btScalar addSingleResult(btManifoldPoint& cp, const btCollisionObject* colObj0,int partId0,int index0,const btCollisionObject* colObj1,int partId1,int index1)
{
btVector3 ptA = cp.getPositionWorldOnA();
btVector3 ptB = cp.getPositionWorldOnB();
std::cout << "HIT" << std::endl;
return 0;
}
};
Code: Select all
warning btCollisionDispatcher::needsCollision: static-static collision!