1

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

我以三人一组计分。假设它们存储在向量 a、b 和 c 中,其中 a 是第一个点(在顶部),b 是第二个点(在底部),c 是第三个点(在顶部)。根据右手定则,要计算法线,我必须这样做:法线 = (cb) x (ab)。这应该给我一个正常的面朝外。但是,法线被向内绘制。要绘制法线,我只需将 glTranslatef 到三角形的中心,然后画一条从 (0,0,0) 到法线的线。我的计算不正确吗?

4

1 回答 1

2

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

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

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

于 2013-10-15T04:54:43.667 回答