对于我正在开发的 3D 游戏引擎,我需要计算两个 3D 三角形是否在同一平面上以相应地显示它。如何计算 3D 空间中三角形的角度?
计算表面法线并比较它们会给我两个等效的法线吗?
你为什么要这样做?您希望测试的三角形数量是多少?实时渲染算法似乎有点复杂!
反正:
计算三角形的法线n
。然后计算平面方程:
作为你a.x + b.y + c.z + d = 0
的(a,b,c)
三角形法线和d = - dot(n,P)
(P是你的三角形顶点之一)。对第二个三角形做同样的事情。
abcd
如果四个值相等或相反(全部在一起),则两个平面相同。
你所问的在数字上是不可能的。舍入误差将使这样的测试完全无关紧要。
但是,您可能想测试“两个三角形是否在同一平面上,在一定的公差范围内”。这很难做到,而且在这里,舍入错误也可能会弄乱任何可能的方法。事实上,只要三角形很薄,它们所在的平面就会存在很大的不确定性。
如果您真的想要,我可以向您指出一些文献(最好的办法是查看CGAL库,看看他们是否实现了与您的问题相关的东西)。任何事情都可能涉及任意精度的浮点数、操作的巧妙重新排序,并且无论如何都会导致不精确的结果。
因此,我强烈建议您为您的实际问题找到另一种方法。
如果您尝试计算通过三个点的平面方程,然后测试其他三个点,则舍入误差是一个(巨大的)问题。还有另一种解决方案。
您可能想要计算六个点的惯性矩阵,将其对角化并查看其最小特征值是否在其他两个点的某个微小值内。这意味着您的六个点实际上位于同一平面上,在公差范围内。