我正在尝试用 C++ 尝试 2D 物理引擎。到目前为止,似乎最受欢迎的是 Box2D。不幸的是,Box2D 是一个刚性身体物理引擎,这并不能真正帮助我实现我想要尝试的目标。
我希望能够定义一个具有多个由弹簧连接的顶点的形状,这样当该形状与刚性或其他非刚性形状碰撞时,其形状将是灵活的。
现在我尝试想出仅使用刚体在 Box2D 中执行此操作的方法,但似乎总是存在缺陷:
那么在 C++ 中进行此类物理计算的最佳方法是什么?最好不必编写整个物理引擎。也许我只是缺少 Box2D 的一个功能。也许这不是正确的选择。那什么才是正确的选择呢?
我认为 Dax Phyz 既有 2D 又有软体。
如果您只是寻找变形,我建议使用多边形模型(修剪网格),我可以在其中捕获对表示该形状的刚体的碰撞回调。在碰撞点上,我将确定对一个或多个顶点造成的变形量。
对于不变形,我建议每个时间步都应该迭代变形点并尝试将它们向外推。我想查询可以通过碰撞世界中非常小的球体查询来完成。这还要求您保持“最大”不变形位置。
此方法实施起来相当简单,尽管它不是您正在寻找的“软体”。 http://chriscavanagh.wordpress.com/2008/06/24/silverlight-soft-body-physicals/似乎是一个实现,给出了您可能想要研究的源代码。
我真的不知道什么是最好的方法,但是这里,靠近页面末尾的是“springs”的代码。