如何制作2D软体物理引擎?

时间:2011-06-28 04:57:56

标签: physics game-physics rigid-bodies

Box2d中刚体的定义是

  

一大堆如此强大的物质   任意两位之间的距离   块上的物质完全是   不变。

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

我希望离开这个社区的是资源,它教会我如何弯曲,破坏和互动对象。我不关心这些物体的分子或化学性质,当我试图寻找如何计算一块木头,金属,橡胶,粘性物质,液体,有机物质时,我常常发现这一切。在施加力之后,等等可能看起来像。

另外,我是一个非常直观的人,因此图表等对我来说非常有帮助。

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

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

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

2.如果不花费数年时间就可以自己创作吗?

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

4.最后,如果我要转换另一个库,那么它是最好的改变box2D已经是2d代码,Bullet已经是软代码,还是混合了两个源代码?


谢谢!

5 个答案:

答案 0 :(得分: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)根据我刚才的说法,你现在应该知道答案。如果你是冒险的,有时间去杀人和学习的意愿,那么我说去吧!当然,一开始会很难,但随着时间的推移,它变得越来越容易。另外,学习新东西很有趣!

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

答案 1 :(得分:5)

快速和部分答案:

  • 由于其属性,刚体很容易建模(您可以使用物理工具,如"Torseur+ (link on french on wikipedia, english equivalent points to screw theory)来控制在元素中任意点施加的力。
  • 相比之下,非固体元素从几乎固体(认为非常坚硬的橡胶:它可以移动但几乎是固体)移动到几乎是液体(想想非常柔软的橡胶,乳胶)。这意味着应用于该对象knd的动态属性非常复杂并且取决于对象的性质
  • 以弹簧为例:很容易独立建模(f = kx),但是创建一个能够模拟特定情况的通用工具是一场噩梦(特别是如果你想到角落情况:扩展不是无限的,压缩达到较低点,材料是非线性的......)
  • 据我所知,在处理“弹性”材料时,人们会出于自己的目的进行自己的模型化(不存在通用材料)。

现在回答:

  1. 可能不是,不是我至少知道
  2. 不容易,看看之前的原因
  3. 除非你在弹性材料方面有很高的背景,否则我担心它会很痛苦
  4. 希望这有帮助

答案 2 :(得分:3)

使用弹簧关节体可以很好地模拟一些特殊情况,例如可变形球: enter image description here

以下是cocos2d的实现示例:http://2sa-studio.blogspot.com/2014/05/soft-bodies-with-cocos2d-v3.html

答案 3 :(得分:2)

根据您需要的可变形对象的复杂程度,您可以使用box2d模拟它们,用关节或弹簧约束刚体。我过去使用box2d克隆为xna(farseer)做了它并且它工作得很好。希望这会有所帮助。

答案 4 :(得分:1)

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

  1. Inelastic Collisions:这里的数学很简单,你可以自己写一个相当不错的图书馆,而不需要为2D点/球做太多工作。 (通过更多的工作,你可以学习扩展身体的物理学。)
  2. 材料弯曲和断裂:这很难。通常,您必须为机械工程中的许多主题建模:
    1. Continuum Mechanics
    2. Structural Analysis
    3. Failure Analysis
    4. Stress Analysis
    5. Strain Analysis
  3. 我不是一丝不苟。通常,模拟材料的弯曲和断裂是非常详细和变化的主题。这需要很长时间。成功的唯一方法就是充分了解科学,以便在限制游戏模型所需的科学范围方面做出明智的捷径。

    然而,问题的另一半(建模Inelastic Collisions)是一个更容易实现的目标。

    祝你好运!