【问题标题】:Incorrect OpenGL windingOpenGL 缠绕不正确
【发布时间】: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);,因为它是背面剔除。

标签: c++ opengl


【解决方案1】:

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

【讨论】:

  • 谢谢!看来我没有正确理解这个概念。 :)
猜你喜欢
  • 1970-01-01
  • 2015-12-24
  • 2013-03-17
  • 2017-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-20
  • 1970-01-01
相关资源
最近更新 更多