在FreeGLUT(OpenGL)中向内绘制而不是向外绘制的法线

时间:2013-10-15 04:19:31

标签: opengl glut freeglut normals cross-product

我通过计算顶部和底部圆圈上的点然后连接这些点来制作使用三角形的圆柱体。我从(1,1,0)开始。然后,我计算底部的一个点(通过仅改变y轴 - >(1,0,0)),然后是顶部的下一个点(x = xcosA,z = zsinA,其中A是任意角度)等等。所以,我在逆时针方向的顶部和底部描绘圆圈。现在,我想绘制这些三角形的法线。

我以三人一组的形式拿分。假设它们存储在向量a,b和c中,其中a是第一个点(在顶部),b是第二个点(在底部),c是第三个点(在顶部)。根据右手规则,要计算法线,我必须这样做:normal =(c-b)x(a-b)。这应该给我一个正常面向外面。然而,正常情况正在向内。为了绘制法线,我只是glTranslatef到三角形的中心,我画了一条从(0,0,0)到正常的线。我的计算不正确吗?

1 个答案:

答案 0 :(得分:2)

计算是正确的,但点的顺序不是。请记住,交叉积是反对偶的,即a x b = - (b x a)

在圆柱体的特定示例中,您从左到右定义了点ac(从正面看时)。使用当前的正常计算,法线应该向内。如果你想要它向外,你可以颠倒正常计算的顺序。可能的解决方案是:normal = (a - b) x (c - b)

PS。:三角形法线(书中)的通常定义为(b - a) x (c - a),与上面的相同。