如何对多个小三角形物体进行碰撞检测?

我明白任何形状都可以通过更小的三角形创建(或近似)。 任何矩形都可以由两个较小的三角形创建。 任何圆圈都可以由许多薄薄的“比萨片”三角形创建。 这如何转化为碰撞检测

我知道如何使用顶点计算矩形重叠。 我了解如何使用中心,半径和距离来计算圆形重叠。

但是,如何对由小三角形构成的形状进行碰撞检测呢? 不具体,但只是一般的概念….

Solutions Collecting From Web of "如何对多个小三角形物体进行碰撞检测?"

但是,如何对由小三角形构成的形状进行碰撞检测呢?

不这样做。

针对任意三角形集合(或者更糟糕的是,在任意三角形的两个集合之间)的碰撞检测是非常昂贵的。

相反,我们通常以分层的方式进行集合检测,首先从非常粗糙,简单的形状(如盒子或球体)开始,估计(糟糕的)底层对象。

这使我们能够迅速将大多数潜在的碰撞拒绝为“不发生”,这是通常的情况。 在这样一个粗略的检查通过的情况下,这表明可能的实际碰撞,并且我们继续进行检查,以更详细地描述下面的形状(例如由多个紧密配合的胶囊形状组成的或多个alignment的边界框)。

从本质上讲,碰撞检测从粗testing开始,并且随着这些testing的通过,继续越来越多的细节表示。 这个由Shiro在Alexandre的回答中提供的图像说明了一个复杂的模型(一个人)是如何由一系列较简单的形状表示的:

hitboxes

我们实际上很less需要在单个三角形层次上进行碰撞,而当我们这样做时,我们通常会使用粗糙的方法来钻取一小组潜在的三角形进行testing。 在这一点上,使用特定的algorithm来执行testing,就像testing两个矩形是否重叠一样。 例如,您可以确定光线是否以及在哪里碰到三角形 。

碰撞检测基于几何学(像线,平面,球体,盒子,胶囊,圆柱体)。

如果需要对三角形上的形状执行碰撞检测,例如不平坦的地形,则必须对形成网格的所有三角形进行testing。

如果你到了这一步,我强烈建议使用预先制作的碰撞检测引擎,因为这种东西变得非常复杂,非常快。