Collision-only trimesh->trimesh collision yields 0 hits.

Karrok
Posts: 65
Joined: Fri May 13, 2011 1:11 pm

Collision-only trimesh->trimesh collision yields 0 hits.

Post by Karrok »

Hey All,

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);
Add Object (happens for every object obviously)

Code: Select all

btCollisionShape* cs = osgbBullet::btTriMeshCollisionShapeFromOSG( node );
btCollisionObject* co = new btCollisionObject();
co->setCollisionShape(cs);
collisionWorld->addCollisionObject( co );
Checking for collisions

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();
Where rCallBack

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;
	}
};
While running I do get a singla warning:

Code: Select all

warning btCollisionDispatcher::needsCollision: static-static collision!
So what is missing? :)
Karrok
Posts: 65
Joined: Fri May 13, 2011 1:11 pm

Re: Collision-only trimesh->trimesh collision yields 0 hits.

Post by Karrok »

Ok so, apparently the Trimesh-trimesh collisions can not be found with the default dispatcher. Changing the CollisionShape from trimesh to convex-trimesh or convexhull was caught by the default dispatcher.

Can Trimesh-trimesh collsions only be caught using gimpact ?

The the above mentioned collisionshapes were generated using osgBullet:

Trimesh: btBvhTriangleMeshShape // does not work
ConvexTrimesh: btConvexTriangleMeshShape //works
Convexhull: btConvexHullShape // works
bimmy47
Posts: 6
Joined: Thu May 26, 2011 8:36 pm

Re: Collision-only trimesh->trimesh collision yields 0 hits.

Post by bimmy47 »

That is exactly correct. There is a handy little chart in the manual which shows collision handlers for various types of interaction, and according to that trimesh to trimesh is the domain of gimpact.
Karrok
Posts: 65
Joined: Fri May 13, 2011 1:11 pm

Re: Collision-only trimesh->trimesh collision yields 0 hits.

Post by Karrok »

Ok, i thought i was passed it by simply adding the algorithm to the dispatcher but i was wrong :<