【问题标题】:OpenGL strange render using GL_TRIANGLES使用 GL_TRIANGLES 的 OpenGL 奇怪渲染
【发布时间】:2014-10-27 06:23:45
【问题描述】:

渲染这些我自己编码的球体/圆柱体时,我得到了一种奇怪的效果。

顶点和索引是正确的,因为当我在 glDrawElements 中使用 GL_LINE_STRIP 而不是 GL_TRIANGLES 时,我的对象按预期呈现,所以没有重复的顶点,但是当我反转索引顺序时,我得到了相同的效果。

以下是使用 GL_TRIANGLES 渲染的对象,您可以看到在其中渲染的这些内圈:

http://imgur.com/4ocO2Bt

以下是带有 GL_LINE_STRIP 的对象,我觉得几何形状很好:

http://imgur.com/f0wGNC1

我的顶点着色器代码是标准的 MVP * 顶点位置变换,而像素着色器代码只是输出一种颜色,没有做任何其他事情。

为了清楚起见,即使我反转索引,我仍然可以使用 GL_TRIANGLES 获得完全相同的图像,我仍然可以看穿物体,在网格内具有完全相同的圆圈。

【问题讨论】:

  • 要么你没有启用 GL_DEPTH_TEST 要么你的面部剔除是错误的测试 glCullFace ( GL_FRONT);因为您的默认值是 glCullFace ( GL_BACK);
  • 谢谢!我的面部剔除甚至没有启用。我必须启用它然后将其设置为 GL_FRONT

标签: c++ opengl graphics


【解决方案1】:

如果glCullFace ( GL_FRONT); 解决了您的问题并且您打算使用光照渲染几何图形,那么您应该执行以下操作之一:

您的三角形以顺时针(顺时针)方式绘制,因此 OpenGL 计算出靠近您的三角形朝后并剔除它们,因为默认值为 glCullFace ( GL_BACK); 您可以简单地使用 GL_FRONT 调用它并解决问题。但是,当您要计算三角形的法线时,法线将处于相反方向。您可以反转法线或通过在 CCW 中绘制三角形来修复它。

【讨论】:

    猜你喜欢
    • 2014-08-20
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多