Bullet物理引擎学习笔记3(碰撞检测)

现在我们的物体能够动起来了,并且通过Bullet的计算,我们可以观察到物体会像在真实世界中一样运动碰撞等等。一个自然的想法是,我们如何知道谁和谁进行了碰撞?

关于bullet的碰撞检测,google能搜到一些答案,都是正确的,不过看bullet自己的wiki比较全面。

比如我们可以通过一个回调函数来捕捉碰撞,从wiki中我们可以看到有一种回调函数的原型是:

typedef bool (*ContactProcessedCallback)(
    btManifoldPoint& cp,//重合点的意思吧,用不到可以无视它
    void* body0,void* body1);//发生碰撞的俩个物体

这样我们只需要写好一个符合原型的函数——myContactProcessedCallback,然后将其赋值给bullet全局变量gContactProcessedCallback就行了。

        gContactProcessedCallback = myContactProcessedCallback;

最后需要提一下的是,俩个物体间的碰撞在某一次stepSimulation中会进入多次你的回调函数,所以不要第一次进去的时候就把body给删除,正确的做法是将要删除的指针放进一个set,在stepSimulation结束时删除。

  • 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-2022 仙雾

请我喝杯咖啡吧~

支付宝
微信