使用GL_TRIANGLES进行OpenGL奇怪的渲染

时间:2014-10-27 06:23:46

标签: c++ opengl graphics

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

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

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

http://imgur.com/4ocO2Bt

以下是GL_LINE_STRIP的对象,几何对我来说很好看:

http://imgur.com/f0wGNC1

我的顶点着色器代码是一个标准的MVP *顶点位置变换,而像素着色器代码只是输出一个没有其他功能的颜色。

而且要清楚,即使我反转了索引,我仍然可以使用GL_TRIANGLES获得完全相同的图像,我仍然可以看到对象,网格内部具有相同的圆圈。

1 个答案:

答案 0 :(得分:2)

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

您的三角形以CW(顺时针)方式绘制,因此OpenGL计算出靠近您的三角形面向后方并剔除它们,因为默认值为glCullFace ( GL_BACK);您只需使用GL_FRONT调用它并修复问题。但是,当您要计算三角形的法线时,法线将处于相反方向。您可以反转法线或使用CCW中的绘图三角形进行修正。