我以为以前可能有人问过这个问题,但我找不到答案。

我正在为我的游戏引擎(2d,目前使用actionscript3,但可以轻松转换为基于C的语言)编写一个物理库。

我在寻找一个好的公式来计算游戏对象的惯性时遇到问题。

事实是,有很多经过验证的公式可以计算围绕凸多边形质心的惯性,但我的结构略有不同:我有带有自己局部空间的游戏对象。您可以向该局部空间添加诸如圆形和凸多边形的凸形,以形成复杂的对象。形状本身又具有自己的局部空间。因此共有三层:世界,对象和形状空间。

使用moments of inertia Wikipedia article中提供的公式,可以毫无问题地计算形状中每个多边形的惯性。

或很棒的collision detection & response article中提供的内容。

但是我想知道如何将其与我的对象结构相关联,我是否只是将对象形状的所有惯性相加?这就是另一位作者对calculate the inertia of triangulated polygons的用法,他添加了三角形的所有惯性矩。还是还有更多呢?

我发现整个惯性概念很难理解,因为我没有很强的物理学背景。因此,如果有人能给我一个答案,最好是给定质心周围的惯性背后的逻辑,我将非常感激。我实际上是在学习IT -我大学里的游戏开发,但令我非常沮丧的是,他们中没有一位在物理学领域有过丰富的经验。

最佳答案

劳伦斯,如果您停留在二维空间中,则物理学要简单得多。在2D空间中,旋转由标量描述,旋转阻力(惯性矩)由标量描述,旋转是加法和可交换的。事物在三维空间中变得毛茸茸(多得多)。

连接两个对象时,组合的对象将具有其自己的重心。要计算此组合对象的惯性矩,您需要对各个对象的惯性矩求和,并对每个单个对象加上由Steiner parallel axis theorem给出的偏移项。该偏移项是对象的质量乘以到复合质心的距离的平方。

您需要知道惯性矩的主要原因是,您可以模拟对作用在对象上的转矩的响应。这在2D物理学中非常简单。旋转行为类似于牛顿第二定律。使用T =Iα代替F = ma。 (在3D空间中,事情又变得更加棘手了。)您需要找到外力和扭矩,求解线性加速度和旋转加速度,然后进行数值积分。

一本好的游戏物理入门书可能是有序的。您可以在this question at the gamedev sister site中找到推荐文本的列表。

09-11 17:14