在背面剔除时,您可以使用面法线来查看面部是否指向远离相机的情况,如果三角形是按时钟方式或逆时针方向绘制的,可以采用一些技巧。
我对这种顺时针方法感到困惑。看起来使用这种方法,发送到图形卡的顶点数据的排序决定了它是朝向还是远离摄像机。我没有看到这有什么意义,因为相机可以向任何方向看,就好像顶点数据必须根据相机位置而改变,而且显然没有在CPU上完成。
我怎么能理解这个?
答案 0 :(得分:11)
这是从对面看的一个三角形:
3D空间中的3个点定义了一个三角形。此外,如果这些点是有序的(如此处),它们也确定三角形的两个边(面):顺时针和逆时针(它们由放在面内的顺序时钟确定将指向其顶点)
在上面的示例中,三角形是逆时针纹理
现在想象这个三角形是骰子的一个元素:
如果您掷骰子(或围绕它旋转相机),我们从CCW的三角形变为CW,我们不希望它再被纹理化。
这个骰子实际上是由12个这样的三角形构成的,如果我们正确地对它们进行排序,我们将只纹理6个一次面向摄像机。
答案 1 :(得分:5)
我将在示例四元组中向您展示:
(0,0)-------(1,0)
| |
| X |
| |
(0,1)-------(1,1)
我们假设我们从(0,0)
开始。现在,如果您以“顺时针”顺序向上舍入(传递)顶点,则下一个将是(1,0)
,(1,1)
和(0,1)
。 (1,0)
在2点钟或多或少地放置,(1,1)
为4,依此类推。
因此GPU内存中的数据:0,0, 1,0, 1,1, 0,1
。
当您将卷绕方向与您的设置相关联时,您可以轻松区分“前”和“后” - 想象更好,您可以将它绘制在透明的东西上,然后从另一侧看 - 卷发方向会逆转。
因此,卷绕方向的规格仅仅是告诉GPU哪一侧是前方,哪一侧是后方,因为它不能自己做 - 三角形的两侧同样好,而法线向量也是如此。给定的多边形可以是N
或-N
。但是,GPU可以验证哪些与正确的清盘顺序一致。
The (Old) Red Book的第2章对OpenGL特定内容有一些很好的解释,这在今天仍然非常重要。
答案 2 :(得分:1)
这正是关键点:当您创建/绘制面部时,顶点顺序与摄像机方向最初无关!请注意,相机仅仅是一种变换,而不是由openGL识别的东西 所以,在渲染之后,你会看到'通过相机,openGL只是检查(如果启用了剔除)面部顶点的新顺序,现在根据新的方向(在应用了所有变换之后),显示面部与否。