计算opengl中照明的法线

时间:2014-06-25 19:26:55

标签: opengl normals

我有两个四边形,我需要找到正常情况。坐标如下 对于quad 1:

(-2,1.25,-1)
(-2,2.2,0)
(1,2.2,0)
(2,1.25,-1)

我得到了正常的(0,.73, - 。69)

for quad 2:

(-2,2.2,0)
(2,2.2,0)
(2,1.25,1)
(-2,1.25,1)

正常:(0,0.73,0.69)

我已经计算了法线。有人可以确认这些法线是否正确吗?

此外,我读到有关向内和向外的正常指向......有人会向我解释这个概念吗?

1 个答案:

答案 0 :(得分:2)

你的法线看起来基本正确。对于第一个四边形,我得到:

(0.0, 0.725, -0.689)

对于第二个:

(0.0, -0.725, -0.689)

正如你所看到的,我得到了第二个法线的相反符号。这直接导致了问题的第二部分。

术语“向外”对于孤立的四边形并不真正有意义。它主要应用于封闭的形状,它应该具有直观的意义。画一个球体,从球体上的一个点开始绘制法线向量。正常指向“向外”意味着它指向远离立方体的中心,这意味着它指向外部。 “向内”当然是相反的,其中法线指向球体的中心,或指向形状的内部。

还有另一种观察方式,因为法线主要用于照明计算。法线需要指向您想要看到的表面一侧。大多数情况下,你从外面看形状,所以你想要外面的灯光。这意味着你最希望法线指向外面。如果从两侧观察时需要点亮的开放表面,则可以处理更复杂的照明计算,这通常可以在“双面照明”下找到。

这里有一个相关的概念,也就是“缠绕顺序”。它定义了从某个方向查看顶点时是顺时针还是逆时针排列的顶点。 OpenGL使用绕线顺序来决定三角形是否面向观察者。同样,当您从外部观察表面时,或者更常见地从您想要在显示表面时看到的侧面时,您需要关注所需的缠绕顺序。默认情况下,OpenGL使用逆时针绕组,因此当您想要看到一侧的表面时,您需要逆时针绕组,对于封闭形状,大多数来自外部。如果你没有消除向后的三角形,你可以经常使用绕组顺序“错误”,这是用glEnable(GL_CULL_FACE)完成的。但无论如何,如果你总是使用基元的组合绕线顺序,你可以避免遇到问题。

这使我们回到正常的计算。由于只有标志最终不同,我们的计算都没有在技术上错误。我假设四边形使用逆时针绕组,这意味着我从顶点以逆时针顺序出现的方向看到四边形的“外部”。因为我也希望法线指向外面,所以我计算了法线。换句话说,根据我计算的法线,如果你偏离法线方向的四边形,然后回头观察四边形,那么顶点将是逆时针顺序。