30

Box2d中刚体的定义是

一块如此坚固的物质,以至于该块上任意两块物质之间的距离是完全恒定的。

这正是我不想要的,因为我想制作2D(最终可能是 3D)、弹性、可变形、易碎甚至粘性物体。

我希望从这个社区中获得的是资源,这些资源可以教会我物体如何弯曲、断裂和相互作用背后的数学。我不关心这些物体的分子或化学性质,当我尝试搜索如何计算一块木头、金属、橡胶、粘液、液体、有机材料等时,我发现的往往是这些。可能看起来像在对其施加力后。

此外,我是一个非常直观的人,所以图表等对我非常有帮助。

==================================================== ===============================

忽略这些问题,它们已经过时了,我将它们保留在这里只是为了上下文目的

1.有没有像这样简单的2D软体物理引擎?
最好是免费的还是开源的?

2.如果不是,我可以自己制作而不用花费数年时间吗?

3. 考虑到我 1 年的编程经验和子弹是 3D 的,我可以使用现有的子弹和 box2d 等引擎并简单地转换他们的代码,或者这只会导致更多的问题吗?

4.最后,如果我要转换另一个库,是最好改变box2D的已经二维代码,Bullet的已经软代码,还是混合两者的源代码?


谢谢!

4

5 回答 5

17

(1) Bullet 和 PhysX 都在一定程度上支持可变形对象。Bullet 是开源的,PhysX 可以免费使用。它们都有适用于 windows、mac、linux 和所有主要控制台的端口。

(2) 如果你真的知道你在做什么,你可以一起破解一些东西,它甚至可能会起作用。但是,除非您非常了解 Box2D 的顺序脉冲约束求解器的工作原理以及保持系统稳定所需的措施类型,否则可能会出现错误。也就是说,有很多方法可以让可变形对象在类似游戏的环境中轻松工作。第一种选择是对变形进行二阶(或更高阶)近似。这使您可以像处理刚性运动一样处理变形,只是现在您有一些额外的自由度。例如,参见以下论文:

http://www.matthiasmueller.info/publications/MeshlessDeformations_SIG05.pdf

第二种方法是压力软体,它基本上将身体建模为一组具有一些距离约束和压力的粒子。这就是 PhysX 和 Bullet 所做的,而且它现在是一种非常标准的技术(例如,Gish 使用它):

http://citeseerx.ist.psu.edu%2Fviewdoc%2Fdownload%3Fdoi%3D10.1.1.4.2828%26rep%3Drep1%26type%3Dpdf

如果你四处搜索,你可以找到很多关于实现它的教程,但我不能保证它们的质量。最后,最近出现了尝试使用现实弹性模型和有限元类型方法以“正确”方式制作可变形物体的趋势。这仍然是一个活跃的研究领域,因此不适合胆小的人。例如,您可以查看今年 SIGGRAPH 会议中的任意数量的论文:

http://kesen.realtimerendering.com/sig2011.html

(3) 可能不会。虽然有些 2D 风格的游戏可以使用 3D 物理引擎(例如自上而下的游戏)来获得特殊效果。

(4) 根据我刚才所说的,你现在应该已经知道答案了。如果你是喜欢冒险的人,有时间去消磨时间和学习的意愿,那么我说去吧!当然,一开始会很难,但随着时间的推移,它会变得更容易。另外,学习新东西很有趣!

另一方面,如果你现在只想要结果,那就不要这样做。这将花费很多时间,并且您可能会失败(很多)。如果你只是想制作游戏,那么坚持现有的库并在它为你提供的任何抽象的基础上进行构建。

于 2011-06-28T05:54:55.043 回答
5

快速和部分答案:

  • 刚体由于其属性而易于建模(您可以使用物理工具,例如“Torseur+(维基百科上的法语链接,英语等效点到螺旋理论)来模拟在您的元素中任何点施加的力。
  • 相比之下,非固体元素从几乎固体(想想非常硬的橡胶:它可以移动但几乎是固体)移动到几乎液体(想想非常软的橡胶、乳胶)。这意味着应用于该 knd 对象的动态属性非常复杂并且取决于对象的性质
  • 以弹簧为例:独立建模很容易(f=kx),但是创建一个能够为特定情况建模的通用工具是一场噩梦(特别是如果你想到极端情况:扩展不是无限的,压缩达到更低点,材料是非线性的......)
  • 据我所知,在处理“弹性”材料时,人们会出于自己的目的进行自己的建模(不存在通用的建模)

现在答案:

  1. 可能不会,至少我不知道
  2. 不容易,以前看到为什么
  3. 除非你在弹性材料方面有高水平的背景,否则我担心这会很痛苦

希望这有帮助

于 2011-06-28T05:14:33.327 回答
4

使用弹簧接头体可以很好地模拟一些特定情况,例如可变形球: 在此处输入图像描述

这是一个使用 cocos2d 的实现示例:http: //2sa-studio.blogspot.com/2014/05/soft-bodies-with-cocos2d-v3.html

于 2014-07-02T12:21:25.390 回答
2

根据您需要的可变形对象的复杂性,您可以使用 box2d 模拟它们,用关节或弹簧约束刚体。我过去使用 xna (farseer) 的 box2d 克隆来完成它,并且效果很好。希望这可以帮助。

于 2011-07-07T21:21:16.927 回答
1

您问题的物理学分为两个不同的主题:

  1. 非弹性碰撞:这里的数学很简单,你可以自己编写一个相当不错的库,而无需为 2D 点/球做太多工作。(通过更多的工作,你可以学习扩展体的物理学。)
  2. 材料弯曲和断裂:这将很难。通常,您必须对机械工程中的许多主题进行建模:
    1. 连续体力学
    2. 结构分析
    3. 故障分析
    4. 应力分析
    5. 应变分析

我不是油嘴滑舌。一般来说,对材料的弯曲和断裂进行建模是一个非常详细和多样的主题。这将需要很长时间。成功的唯一方法是充分了解科学,以便您可以巧妙地捷径来限制您需要在游戏中建模的科学范围。

但是,问题的另一半(建模非弹性碰撞)是一个更容易实现的目标。

祝你好运!

于 2012-10-04T20:57:25.833 回答