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 缠绕不正确的主要内容,如果未能解决你的问题,请参考以下文章