这个问题可能是一个愚蠢的问题,但我真的很好奇。
在玩过 HL2、GMod 或愤怒的小鸟等游戏,并使用过 Box2D 等物理库后,我开始想知道“物理引擎是如何模拟物理的?”
就像词法分析器和解析器在编译时用于理解代码,光线追踪用于渲染 3D 场景一样,我认为物理引擎中使用一些概念(碰撞检测除外)来模拟物理,例如计算扭矩和五边形进行滚桶滚动的速度。
物理引擎如何实际模拟物理?使用了哪些概念?网上有没有关于制作像这样的物理引擎的“教程” ,它演示了光线追踪?
这个问题可能是一个愚蠢的问题,但我真的很好奇。
在玩过 HL2、GMod 或愤怒的小鸟等游戏,并使用过 Box2D 等物理库后,我开始想知道“物理引擎是如何模拟物理的?”
就像词法分析器和解析器在编译时用于理解代码,光线追踪用于渲染 3D 场景一样,我认为物理引擎中使用一些概念(碰撞检测除外)来模拟物理,例如计算扭矩和五边形进行滚桶滚动的速度。
物理引擎如何实际模拟物理?使用了哪些概念?网上有没有关于制作像这样的物理引擎的“教程” ,它演示了光线追踪?
创建一个(强大的)物理引擎比最初看起来要复杂得多。诀窍是尽可能地伪造而不是计算确切的值。作为起点,这篇博文有一个很好的介绍。我认为Thomas Jakobsen的这篇论文也很好读,它介绍了某些概念。该博客还有一些有趣的文章,解释了集成商的详细信息以及如何管理在线游戏的物理特性。
浏览 Box2D 等物理引擎的源代码是了解实现的好主意,但如果您不了解它们在做什么的理论,它可能会让人感到困惑。其原因是因为该理论通常效率太低而无法在实时游戏中实现,因此算法和技术被用于在现实主义和速度之间取得平衡。
如果您想在商业游戏中使用它而创建自己的物理引擎,我建议您选择现有的解决方案。(例如,愤怒的小鸟使用 Box2D)。但是,如果您这样做是为了体验和学习物理引擎,那么它肯定会教给您很多关于效率和智能技术的知识。
原则上,所有物理引擎都是牛顿第二运动定律的直接应用:
加速度=力/质量
通过随着时间的推移对加速度进行积分,您可以获得速度。通过积分速度,您可以获得物体在空间中的位置。积分以数值方式执行,使用类似 Runge-Kutta 的方法。
主要并发症来自:
一个好的起点是模拟在重力影响下在二维盒子中弹跳的单个粒子。然后,给粒子一个半径,添加更多粒子,并计算它们之间的碰撞。那时,您拥有一个足以用于简单游戏的基本物理引擎。
看看一个的来源怎么样。那就是我要开始的地方。