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才会发生碰撞。

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2011-2021 仙雾

请我喝杯咖啡吧~

支付宝
微信