2013-10-15 37 views
1

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

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

回答

2

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

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

PS .:三角法线(在书中)的通常定义是(b - a) x (c - a),它等于上面的那个。