C ++中的非刚体2D物理引擎

时间:2010-07-16 22:12:52

标签: c++ box2d physics point

我正在尝试用C ++实验2D物理引擎。到目前为止,似乎最受欢迎的是Box2D。不幸的是,Box2D是一个刚性的身体物理引擎,这并不能帮助我实现我想要尝试的东西。

我希望能够定义一个具有多个由弹簧连接的顶点的形状,这样当这个形状与刚性或其他非刚性形状碰撞时,它的形状将是灵活的。

现在我试图想办法在Box2D中只使用刚体进行此操作,但似乎总是存在缺陷:

  1. 使用矩形或线段作为柔性形状的外边缘。这些会与其他形状碰撞。不幸的是,它们没有弹性,所以不会看到预期的效果。
  2. 形状的每个顶点可以是具有其自己的小圆形形状的主体。然后可以通过弹簧将这些主体连接在一起。这在形状变形方面效果很好,但想象一下,如果形状落在刚性尖钉上并且尖钉刚好在顶点之间穿过。然后形状会卡在钉子上。
  3. 那么用C ++做这种物理的最佳方法是什么?优选地,不必编写整个物理引擎。也许我只是错过了Box2D的一个功能。也许这不是正确的选择。那么什么是正确的选择?

4 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

如果你只是在寻找变形,我建议使用一个多边形模型(trimesh),在那里我会捕捉到代表那个形状的刚体的碰撞回调。在碰撞点处,我将确定对一个或多个顶点造成的变形量。

对于不变形,我建议你应该在每个时间步长迭代你的变形点并尝试将它们向外推。我猜这个查询可以通过碰撞世界中非常小的球形查询来完成。这也需要你保持一个“最大”的未变形位置。

这种方法实施起来相当简单,虽然它不是一个“软体”,可能就是你想要的。 http://chriscavanagh.wordpress.com/2008/06/24/silverlight-soft-body-physics/似乎是一个实现,它提供了您可能想要查看的源代码。

答案 2 :(得分:1)

我认为Dax Phyz同时拥有2D和软体。

答案 3 :(得分:0)

我真的不知道什么是最好的方式,但here,靠近页面的末尾是“弹簧”的代码。