Collision Filtering(selective collisions) 碰撞过滤(选择性碰撞)
Bullet 提供了三种简单的方法来确保只有某些对象相互碰撞:masks, broadphase filter callbacks, nearcallbacks
值得注意的是,mask-based collision selection发生在工具链的上游,而不是回调。简而言之,如果mask足以满足您的目的,请使用它们;它们性能更好,使用起来更简单。
当然,不要因为提高性能,就试图将某些东西硬塞到mask-based selection system,这显然不合适。
Filtering Collisions Using Masks 使用 Masks 过滤碰撞
Bullet 支持 bitwise masks 作为决定事物是否应该与其他事物碰撞或接受碰撞的一种方式
int myGroup = 1;
int collideMask = 4;
world->addCollisionObject(object, myGroup, collideMask);
在 mask 与其他对象的组匹配(in needsBroadphaseCollision)的情况下,在 broadphase collision detection 期间,overlapping pairs 被添加到 pair cache 中
bool collides = (proxy0->m_collisionFilterGroup & proxy1->m_collisionFilterMask)