Physics 如何制作二维软体物理引擎?

Physics 如何制作二维软体物理引擎?,physics,game-physics,rigid-bodies,Physics,Game Physics,Rigid Bodies,Box2d中刚体的定义为 一块非常坚硬的物质 任意两位之间的距离 块上的物质是完全不可分割的 不变的 这正是我不想要的,因为我想制作2D(最终可能是3D),有弹性、可变形、易碎甚至粘性的物体 我希望从这个社区得到的是一些资源,这些资源教会我物体弯曲、断裂和相互作用背后的数学知识。我不关心这些物体的分子或化学性质,当我试图搜索如何计算一块木头、金属、橡胶、黏液、液体、有机材料等在受到力后的样子时,通常我只找到了这些。 另外,我是一个非常直观的人,所以图表等对我非常有帮助 =============

Box2d中刚体的定义为

一块非常坚硬的物质 任意两位之间的距离 块上的物质是完全不可分割的 不变的

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

我希望从这个社区得到的是一些资源,这些资源教会我物体弯曲、断裂和相互作用背后的数学知识。我不关心这些物体的分子或化学性质,当我试图搜索如何计算一块木头、金属、橡胶、黏液、液体、有机材料等在受到力后的样子时,通常我只找到了这些。

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

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

忽略这些问题,它们都很老了,我把它们放在这里只是为了上下文的目的

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

2.如果不是的话,我是否有可能不用花上几年的时间就自己做一个呢

3.考虑到我1年的编程经验和bullet是3D的,我可以从bullet和box2d这样的现有引擎开始,简单地转换它们的代码,还是这会导致以后出现更多问题

4.最后,如果我要转换另一个库,它是对box2D已经是2d代码、Bullet已经是软代码的最好更改,还是将两者的源代码混合使用



谢谢

快速和部分的回答:

  • 刚体由于其特性而易于建模(您可以使用物理工具,如建模在图元中任意点应用的力)
  • 相比之下,非固体元素从几乎固体(想想非常硬的橡胶:它可以移动,但几乎是固体)移动到几乎液体(想想非常软的橡胶,乳胶)。这意味着应用于对象knd的动力学特性非常复杂,并且取决于对象的性质
  • 以弹簧为例:独立建模很容易(f=k.x),但创建一个能够对特定情况建模的通用工具是一场噩梦(特别是如果您想到拐角情况:扩展不是无限的,压缩达到较低的点,材质是非线性的……)
  • 据我所知,在处理“弹性”材料时,人们出于自己的目的进行自己的建模(不存在通用模型)
现在回答如下:

  • 可能不会,至少我不知道
  • 不容易,请看前面的原因
  • 除非你有高水平的弹性材料背景,否则我担心这会很痛苦
  • 希望这有助于

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

    (二)如果你真的知道自己在做什么,你可以一起破解一些东西,甚至可能会成功。但是,除非你非常了解Box2D的顺序脉冲约束解算器是如何工作的,以及需要什么类型的度量来保持系统稳定,否则可能会有bug。也就是说,有很多方法在类似游戏的环境中,让可变形对象以最小的麻烦工作。第一种选择是秒(或更高)变形的顺序近似。这使您可以用与处理刚体运动大致相同的方式处理变形,只是现在您有了一些额外的自由度。例如,请参见以下文章:

    第二种方法是压力柔体,它基本上将物体建模为一组具有一定距离约束和压力的粒子。这是PhysX和Bullet所做的,到目前为止,这是一种相当标准的技术(例如,Gish使用它):

    如果你到处搜索,你可以找到很多关于实现它的教程,但我不能保证它们的质量。最后,最近有一个更大的推动,试图用真实的弹性模型和有限元类型的方法“正确”地制作可变形对象。这仍然是一个活跃的研究领域,因此它不适合h例如,你们可以看看今年SIGGRAPH会议记录中的任意数量的论文:

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

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


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

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

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

  • :这里的数学很简单,你可以自己编写一个相当不错的库,而不必为2D点/球做太多的工作。(通过更多的工作,你可以学习扩展体的物理。)
  • 材料弯曲和断裂:这很难。一般来说,你必须对机械工程中的许多主题进行建模:
  • <