Why error???

peacemoon
Posts: 15
Joined: Wed Sep 03, 2008 12:52 pm

Why error???

Post by peacemoon »

I implemented my own NearCallback function. But i have an error and don't know why?
This is my function

void customNearCallback(btBroadphasePair& collisionPair, btCollisionDispatcher& dispatcher, const btDispatcherInfo& dispatchInfo)
{
btCollisionObject* colObj0 = (btCollisionObject*)collisionPair.m_pProxy0->m_clientObject;
btCollisionObject* colObj1 = (btCollisionObject*)collisionPair.m_pProxy1->m_clientObject;

if (dispatcher.needsCollision(colObj0,colObj1))
{
//dispatcher will keep algorithms persistent in the collision pair
if (!collisionPair.m_algorithm)
{
collisionPair.m_algorithm = dispatcher.findAlgorithm(colObj0,colObj1);
}

if (collisionPair.m_algorithm)
{
btManifoldResult contactPointResult(colObj0,colObj1);

//discrete collision detection query
collisionPair.m_algorithm->processCollision(colObj0,colObj1,dispatchInfo,&contactPointResult);

//get contact point
int num = contactPointResult.getPersistentManifold()->getNumContacts();
int i=0;
for (int i=0; i<num; i++){
btManifoldPoint& contactPoint= contactPointResult.getPersistentManifold()->getContactPoint(i);
printf("Point %d = %8.6f\n",i,contactPoint.m_appliedImpulse);
}
}
}

}

Everything works fine with the above code. But since i know that there is only one contact point. I just want to throw the "for" away and replace the for iteratation by this code:
btManifoldPoint& contactPoint= contactPointResult.getPersistentManifold()->getContactPoint(0);

Then i received this error: btManifoldPoint& btPersistentManifold::getContactPoint(int): Assertion `index < m_cachedPoints' failed.

I really don't find the difference between these two implementations
mreuvers
Posts: 69
Joined: Sat May 10, 2008 8:39 am

Re: Why error???

Post by mreuvers »

Well if you are to use such an explicit construction

Code: Select all

contactPointResult.getPersistentManifold()->getContactPoint(0);
make sure you double-double check that there is at least one contactpoint to begin with, so you need to do something like:

Code: Select all

int num = contactPointResult.getPersistentManifold()->getNumContacts();
if (num >= 1)
{
btManifoldPoint& contactPoint= contactPointResult.getPersistentManifold()->getContactPoint(0);
}
If your code then still errors, it would surprise me ;-)