如何纠正以下物理模拟中的浮点错误:
我正在使用这种方法进行碰撞检测:
For each Triangle
If the original point is in front of the current triangle, and the desired point is behind the desired triangle:
Calculate the intersection point of the ray (original-desired) and the plane (triangle's normal).
If the intersection point is inside the triangle edges (!)
Respond to the collision.
End If
End If
Next Triangle
我遇到的问题是,有时该点落入浮点数学的灰色区域,在那里它非常接近 BC 线,以至于它无法与任何一个三角形碰撞,尽管从技术上讲它应该始终与一个或另一个碰撞他们共享一个优势。当这种情况发生时,该点正好在两个边共享三角形之间通过。我用 (!) 标记了一行代码,因为我相信这是我应该进行更改的地方。
在非常有限的情况下工作的一种想法是跳过边缘测试。有效地将三角形变成平面。这仅在我的网格是凸包时有效,但我计划创建凸形。
我专门使用点积和三角形法线进行我所有的前后测试。
最佳答案
当对某些具有边缘和顶点的几何体拍摄单条光线时,这是一个不可避免的问题。物理模拟似乎能找出最小的数值误差,这真是太神奇了!
其他受访者提出的一些解释和解决方案是行不通的。特别是:
以下是一些真正的解决方案:
让我强烈推荐 Christer Ericson 的书 Real-Time Collision Detection。第 446–448 页讨论了这个确切的问题,第 184–188 页解释了使射线与三角形相交的标量三重积方法。
关于math - 3D 中的点三角形碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/99542/