4

对于我正在开发的 3D 游戏引擎,我需要计算两个 3D 三角形是否在同一平面上以相应地显示它。如何计算 3D 空间中三角形的角度?

计算表面法线并比较它们会给我两个等效的法线吗?

4

2 回答 2

3

你为什么要这样做?您希望测试的三角形数量是多少?实时渲染算法似乎有点复杂!

反正:

计算三角形的法线n。然后计算平面方程: 作为你a.x + b.y + c.z + d = 0(a,b,c)三角形法线和d = - dot(n,P)(P是你的三角形顶点之一)。对第二个三角形做同样的事情。

abcd如果四个值相等或相反(全部在一起),则两个平面相同。

于 2010-09-16T11:50:07.300 回答
3

你所问的在数字上是不可能的。舍入误差将使这样的测试完全无关紧要。

但是,您可能想测试“两个三角形是否在同一平面上,在一定的公差范围内”。这很难做到,而且在这里,舍入错误也可能会弄乱任何可能的方法。事实上,只要三角形很薄,它们所在的平面就会存在很大的不确定性。

如果您真的想要,我可以向您指出一些文献(最好的办法是查看CGAL库,看看他们是否实现了与您的问题相关的东西)。任何事情都可能涉及任意精度的浮点数、操作的巧妙重新排序,并且无论如何都会导致不精确的结果。

因此,我强烈建议您为您的实际问题找到另一种方法。

如果您尝试计算通过三个点的平面方程,然后测试其他三个点,则舍入误差是一个(巨大的)问题。还有另一种解决方案。

您可能想要计算六个点的惯性矩阵,将其对角化并查看其最小特征值是否在其他两个点的某个微小值内。这意味着您的六个点实际上位于同一平面上,在公差范围内。

于 2010-09-16T12:08:55.953 回答