Bullet物理引擎学习笔记4(碰撞过滤)
Bullet物理引擎学习笔记4(碰撞过滤)
仙雾有时候我们会想让俩个物体不发生碰撞而是穿过对方,比如打砖块游戏里的Unstoppable形态的小球。通过查看Bullet的wiki我们可以看到几种方法,有在碰撞添加时防止的,也有碰撞时防止的。我个人最喜欢的是wiki中的第一种,通过位运算的实现的Filter。
#define BIT(x) (1<<(x))//一个宏 enum collisiontypes { COL_NOTHING = 0, //const int groundCollidesWith = COL_AIRBOX;
const int airboxCollidesWith = COL_GROUND | COL_KINEMATICBOX;
const int kinematicboxCollidesWith = COL_AIRBOX;定义好以上之后只需要在addrigidbody是加入2个参数就能实现碰撞过滤了。
m_dynamicsWorld->addRigidBody(boxBody, COL_AIRBOX, airboxCollidesWith);要说明的是,在最新版本的Bullet中,只有当物体A可碰撞物体中有物体B,并且物体B可碰撞物体中也有物体A,AB才会发生碰撞。