I am using Bullet physics for ray testing and I want to exclude a rigidBody from the ray test for one call only.
Is there anyway to do this without calling removeBody and addBody?
I looked at using btOverlapFilterCallback, but that seems to be for preventing collisions, not ray testing.
temporarily exclude a rigidBody from ray testing
Just use non-default ray intersection callback and filter out your body manually.
That is, make derived class from btCollisionWorld::ClosestRayResultCallback and override virtual bool needsCollision(btBroadphaseProxy* proxy0) const.
http://bulletphysics.org/Bullet/BulletFull/btCollisionWorld_8h_source.html#l00231
Just use non-default ray intersection callback and filter out your body manually.
That is, make derived class from btCollisionWorld::ClosestRayResultCallback and override virtual bool needsCollision(btBroadphaseProxy* proxy0) const.
http://bulletphysics.org/Bullet/BulletFull/btCollisionWorld_8h_source.html#l00231
Yeah, that seems to work. Thanks for the answer ;)
This is the code I used:
struct ExcludeRayResultCallback : public btCollisionWorld::ClosestRayResultCallback
{
ExcludeRayResultCallback(const btVector3& rayFromWorld,const btVector3& rayToWorld)
: btCollisionWorld::ClosestRayResultCallback(rayFromWorld, rayToWorld)
{
m_pExlude = NULL;
}
virtual bool needsCollision(btBroadphaseProxy* proxy0) const
{
btCollisionObject* pCollisionObject = (btCollisionObject*)proxy0->m_clientObject;
assert(pCollisionObject->getInternalType() == btCollisionObject::CO_COLLISION_OBJECT ||
pCollisionObject->getInternalType() == btCollisionObject::CO_RIGID_BODY);
return pCollisionObject->getUserPointer() != m_pExlude;
}
void* m_pExlude;
};
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement