OpenGL 缠绕不正确

Posted

技术标签:

【中文标题】OpenGL 缠绕不正确【英文标题】:Incorrect OpenGL winding 【发布时间】:2015-07-08 11:59:59 【问题描述】:

在初始化OpenGL时,我设置如下:

glEnable(GL_CULL_FACE);
glFrontFace(GL_CCW);
glCullFace(GL_FRONT);

然后,我在屏幕上画了一个三角形。这就是我所做的,真的。但是 OpenGL 总是使用我使用 glFrontFace 指定的相反的缠绕类型。

三角形顶点定义如下:

static GLfloat TRIANGLE[] = 
   0.0f,  0.5f,  0.0f,  // Point 1 on image
  -0.5f, -0.5f,  0.0f,  // Point 2
   0.5f, -0.5f,  0.0f,  // Point 3
;

您可以在下图中看到结果:

我期望的是 GL_CCW 绘制三角形而 CL_CW 没有。但发生的情况恰恰相反。

我的视角和视图矩阵是正确的。什么可能导致这个问题?

【问题讨论】:

您说您的矩阵是正确的,但请出示它们以便我们知道。您的矩阵可能只是从另一侧查看三角形。 是的,我会建议缠绕取决于您是向下看 +Z 还是 -Z。 glCullFace(GL_BACK);,因为它是背面剔除。 【参考方案1】:

glCullFace 指定剔除的一侧,而不是绘制哪一侧。因此,当您的三角形以 CCW 顺序给出并且您按照您的方式启用所有内容时,正面(CCW 面)被剔除并且没有绘制任何内容。

【讨论】:

谢谢!看来我没有正确理解这个概念。 :)

以上是关于OpenGL 缠绕不正确的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL顶点缓冲区不正确的渲染

OpenGL - 纹理显示不正确(夹紧?)

OpenGL 绘制网格不正确

OpenGL - 纹理加载不正确

OpenGL 3.3 2D 渲染:VAO 配置不正确?

OpenGL - glDrawElementsInstanced - 片段着色器和不正确的颜色