计算并将法线应用于三角形网格

时间:2010-11-30 18:58:15

标签: opengl 3d normals

我有一个三角形网格,我正在尝试计算法线,因此我可以在绘制网格时应用它们。我正在使用立即模式(当我有时间了解它们是如何工作时可能会更改为顶点数组)并使用GL_TRIANGLE_STRIP绘制网格。

我在计算顶点法线时遇到问题。更精确地确定在计算中使用哪些相邻顶点,然后决定何时设置这些法线。考虑一下:

 1_2
 |/|    Supposedly a square where the numbers represent the vertex number in a            
 3 4    triangle strip.

我知道你必须计算属于一个平面的2个向量的叉积,以使平面正常。因此,在该示例中,顶部三角形的法线可以通过执行(2-1)x(3-1)来计算,而第二个通过执行(2-4)x(3-4)来计算。在立即模式下绘制三角形条时,如何应用法线?

我正在做的是在设置vtx 1时设置第一个法线,在设置vtx 4时设置第二个法线,在设置vtx 5时设置第三个等等。然而这会产生问题,因为你显然最终得到了不同的法线三角形的每个顶点(当它们都应该相同时)。例如,三角形| 2,3,4 |只有正确法线的顶点4(因为对于顶点2和3,法线将是第一个三角形之一)。

那怎么办呢?有办法,还是需要更改为GL_TRIANGLES? (我现在不想停止使用立即模式,因为我没有时间)。

1 个答案:

答案 0 :(得分:2)

如果我是正确的你仍然只计算每个三角形的正常值?这是正确的,但在那之后你应该计算每个顶点的法线是什么。这只是特定顶点所附着的所有三角形法线的归一化和。 完成后,您可以继续进行立即模式绘制,指定每个顶点的法线。