如何基于共享顶点的多个三角形计算法向量?

时间:2011-03-13 16:58:42

标签: math opengl 3d mesh

如果我有一个三角形网格,那么如何计算每个给定顶点的法线呢?

我理解如何找到单个三角形的法线。如果我有三角形共享顶点,我可以通过找到每个三角形的相应法线,将其标准化,将其添加到总数,然后对最终结果进行标准化来部分找到答案。然而,这显然没有考虑到每个法线的适当加权(例如,当与大三角形链接时,许多小三角形可以摒弃答案)。

6 个答案:

答案 0 :(得分:4)

我认为一个好的方法应该是使用加权平均值,但使用角度而不是面积作为权重。在我看来,这是一个更好的答案,因为正在计算的正常情况是一个“本地”特征,所以你并不真正关心有三角形的贡献......你需要一种“本地”测量贡献和指定顶点上三角形两边之间的角度就是这样的局部度量。

使用这种方法,许多小(薄)三角形不会给你一个不平衡的答案。

使用角度与使用面积加权平均值相同,如果您通过使用三角形与顶点居中的小球体的交点来本地化计算。

答案 1 :(得分:3)

加权平均值似乎是最佳方法。

但请注意,根据您的应用,尖角仍可能会给您带来麻烦。在这种情况下,您可以通过平均其叉积小于某个阈值(即更接近平行)的曲面法线来计算多个顶点法线。

使用SJ Kim等人使用顶点的多个法向量搜索偏移三角形网格。 al。,有关此方法的更多详细信息。

答案 2 :(得分:2)

This blog post概述了三种不同的方法,并给出了一个可视化的例子,说明为什么标准和简单的方法(在顶点连接的所有面的法线的面积加权平均值)有时可能会得到不好的结果。

答案 3 :(得分:1)

您可以通过将法线乘以三角形的面积来为大三角形赋予更多权重。

答案 4 :(得分:1)

查看此论文:Discrete Differential-Geometry Operators for Triangulated 2-Manifolds

特别是,“离散平均曲率正态算子”(第3.5节,公式7)给出了一个与曲面细分无关的稳健法线,与此处另一个answer引用的博客文章中的方法不同。

答案 5 :(得分:0)

显然你需要使用加权平均来获得正确的法线,但是使用三角形区域将无法满足你的需要,因为每个三角形的面积与三角形法线给定的三角形权重没有任何关系顶点。

如果你基于进入顶点的两边之间的角度,你应该得到进入它的每个三角形的正确重量。如果你能以某种方式将其转换为2d可能会很方便,所以你可以为你的重量偏离360度基础,但很可能只是使用角度本身作为你的重量乘数来计算它在3d空间然后加起来所有的以这种方式产生的法线并使最终结果标准化应产生正确的答案。