我正在尝试用C ++实验2D物理引擎。到目前为止,似乎最受欢迎的是Box2D。不幸的是,Box2D是一个刚性的身体物理引擎,这并不能帮助我实现我想要尝试的东西。
我希望能够定义一个具有多个由弹簧连接的顶点的形状,这样当这个形状与刚性或其他非刚性形状碰撞时,它的形状将是灵活的。
现在我试图想办法在Box2D中只使用刚体进行此操作,但似乎总是存在缺陷:
那么用C ++做这种物理的最佳方法是什么?优选地,不必编写整个物理引擎。也许我只是错过了Box2D的一个功能。也许这不是正确的选择。那么什么是正确的选择?
答案 0 :(得分:3)
答案 1 :(得分:1)
如果你只是在寻找变形,我建议使用一个多边形模型(trimesh),在那里我会捕捉到代表那个形状的刚体的碰撞回调。在碰撞点处,我将确定对一个或多个顶点造成的变形量。
对于不变形,我建议你应该在每个时间步长迭代你的变形点并尝试将它们向外推。我猜这个查询可以通过碰撞世界中非常小的球形查询来完成。这也需要你保持一个“最大”的未变形位置。
这种方法实施起来相当简单,虽然它不是一个“软体”,可能就是你想要的。 http://chriscavanagh.wordpress.com/2008/06/24/silverlight-soft-body-physics/似乎是一个实现,它提供了您可能想要查看的源代码。
答案 2 :(得分:1)
我认为Dax Phyz同时拥有2D和软体。
答案 3 :(得分:0)
我真的不知道什么是最好的方式,但here,靠近页面的末尾是“弹簧”的代码。