什么是openGL中的顺时针面

时间:2013-02-23 14:20:49

标签: opengl graphics render raster culling

在背面剔除时,您可以使用面法线来查看面部是否指向远离相机的情况,如果三角形是按时钟方式或逆时针方向绘制的,可以采用一些技巧。

我对这种顺时针方法感到困惑。看起来使用这种方法,发送到图形卡的顶点数据的排序决定了它是朝向还是远离摄像机。我没有看到这有什么意义,因为相机可以向任何方向看,就好像顶点数据必须根据相机位置而改变,而且显然没有在CPU上完成。

我怎么能理解这个?

3 个答案:

答案 0 :(得分:11)

这是从对面看的一个三角形:

clockwise vs counterclockwise

3D空间中的3个点定义了一个三角形。此外,如果这些点是有序的(如此处),它们也确定三角形的两个边(面):顺时针和逆时针(它们由放在面内的顺序时钟确定将指向其顶点)

在上面的示例中,三角形是逆时针纹理

现在想象这个三角形是骰子的一个元素:

ccw textured box

如果您掷骰子(或围绕它旋转相机),我们从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只是检查(如果启用了剔除)面部顶点的新顺序,现在根据新的方向(在应用了所有变换之后),显示面部与否。