Answers:
但是,如何对由小三角形构成的形状进行碰撞检测?
通过不这样做。
对任意三角形集合(或更糟糕的是,在任意三角形的两个集合之间)的碰撞检测非常昂贵。
取而代之的是,我们通常以分层的方式执行集合检测,首先从极其粗糙,简单的形状(例如盒子或球体)开始(近似)底层对象。
这使我们能够迅速将大多数潜在的碰撞排除为“未发生”,这是通常的情况。如果通过了这样的粗略检查,表明存在潜在的实际碰撞,我们将针对更详细的基本形状(例如,由多个紧密配合的胶囊形状制成的形状,或许多对齐的边框)。
本质上,冲突检测从粗略的测试开始,并且随着这些测试的通过,继续进行越来越详细的表示。Shiro在评论Alexandre的答案时提供的这张图片说明了如何用一系列较简单的形状来表示一个复杂的模型(人类):
实际上,实际上很少需要在单个三角形级别上执行碰撞,并且当我们这样做时,我们通常使用更粗略的方法来向下钻取非常小的一组潜在三角形进行测试。那时,将使用特定的算法来执行测试,就像您要测试两个矩形是否重叠一样。例如,您可以确定射线是否击中三角形以及在何处击中三角形。
碰撞检测基于几何体(原语,例如直线,平面,球体,盒子,胶囊,圆柱体)。
如果需要对由三角形制成的形状(例如不平坦的地形)执行碰撞检测,则必须对构成网格的所有三角形进行测试。
如果您达到了这一点,我强烈建议您使用预制的碰撞检测引擎,因为这种东西变得非常复杂,非常快。