Page 1 of 1

get list of collision pairs

Posted: Fri Apr 13, 2012 4:20 am
by MadMaxxx
Can you please tell how to Bullet can get a list of objects of class btRigidBody, collided with this object.

Sorry for my google.translate)

Re: get list of collision pairs

Posted: Fri Apr 13, 2012 4:35 pm
by MaxDZ8
The manual, reads:
The broadphase adds and removes overlapping pairs from a pair cache. The developer can choose the type of pair cache.
A collision dispatcher iterates over each pair, searches for a matching collision algorithm based on the types of objects involved and executes the collision algorithm computing contact points.

So, get all the manifolds and loop on them. I was pretty sure the manual included a code snippet in the past but I'm unable to find it myself so for your convenience, the code will be like

Code: Select all

const int manifoldCount(dispatcher.getNumManifolds());
for(int loop = 0; loop < manifoldCount; loop++) {
	const btPersistentManifold *mf = dispatcher.getManifoldByIndexInternal(loop);
	const void *obja = mf->getBody0();
	const void *objb = mf->getBody1();
	if(obja == object || objb == object) {
		// This manifold deals with the btRigidBody we are looking for.
		// A manifold is a RB-RB pair containing a list of potential (predicted) contact points.
		const unsigned int numContacts(mf->getNumContacts());
		for(int check = 0; check < numContacts; check++) {
			const btManifoldPoint &pt(mf->getContactPoint(check));
			// do something here, in case you're interested.
		}
	}
}

Re: get list of collision pairs

Posted: Fri Apr 13, 2012 6:08 pm
by MadMaxxx
thank you very much

Re: get list of collision pairs

Posted: Tue Jul 31, 2012 4:04 am
by khoowaikeong
just what i am looking for.
is the 'object' in the code referring to our btRigidBody object?
as getBody doesn't seem to be specify type.

Re: get list of collision pairs

Posted: Tue Jul 31, 2012 8:49 am
by DannyChapman