物理引擎如何实际模拟物理?

时间:2011-06-10 02:45:15

标签: physics-engine

这个问题可能是一个愚蠢的问题,但我真的很好奇。

在玩像HL2,GMod或愤怒的小鸟这样的游戏后,使用像Box2D这样的物理库,我开始怀疑“物理引擎如何模拟物理?”

类似于lexer和parser用于在编译和光线跟踪用于渲染3D场景时理解代码,我认为有一些概念(除了碰撞检测)在物理引擎中用来模拟物理,比如计算五角大楼执行桶形滚动的扭矩和速度。

物理引擎如何实际模拟物理?使用了什么概念?网上是否有关于制作this one等物理引擎的“教程”,它会演示光线跟踪?

3 个答案:

答案 0 :(得分:18)

创建(强大的)物理引擎比起初看起来要复杂得多。诀窍是尽可能假,而不是计算确切的值。作为一个起点,这个blog post有一个很好的介绍。我认为Thomas Jakobsen的这篇论文也是一本很好的读物并介绍了某些概念。 This blog还有一些有趣的文章解释了集成商的细节以及如何管理在线游戏的物理。

查看Box2D等物理引擎的源代码是一个很好的想法,看看实现,但如果你不知道他们正在做什么的理论,它可能会让人感到困惑。造成这种情况的原因是因为理论在实时游戏中实施效率往往过低,因此使用算法和技术在现实主义和速度之间取得平衡。

如果您要创建自己的物理引擎,因为您想在商业游戏中使用它,我建议您选择现有的解决方案。 (例如,“愤怒的小鸟”使用Box2D)。但是,如果你是为体验和学习物理引擎而做的,那肯定会教你很多关于效率和智能技术的东西。

答案 1 :(得分:11)

原则上,所有物理引擎都只是牛顿第二运动定律的直接应用:

加速度=力/质量

通过整合加速度,您可以获得速度。通过积分速度,您可以获得物体在空间中的位置。积分用数字表示,使用Runge-Kutta。

主要的并发症来自:

  • 处理旋转运动
  • 处理冲突事件,例如碰撞和爆炸
  • 检测速度极端的碰撞。在高速行驶时,在检测到碰撞之前,物体最终会穿透或甚至穿过彼此。在低速时,强有力地处理搁置在另一个上的物体而不会抖动或滑动
  • 是一个挑战
  • 运动联系,其中物体彼此部分约束(如铰链或滑块)
  • 计算复杂物体(如汽车或飞机)的力和扭矩
  • 为数百或数千个对象实时有效地完成所有这些工作

一个好的起点是模拟在重力影响下在二维盒子中弹跳的单个粒子。然后,给粒子一个半径,添加更多粒子,并计算它们之间的碰撞。那时,你有一个基本的物理引擎足以用于简单的游戏。

答案 2 :(得分:1)

如何浏览其中一个来源。这就是我要开始的地方。

http://www.tokamakphysics.com/