渲染这些我自己编码的球体/圆柱体时,我得到了一种奇怪的效果。
顶点和索引是正确的,因为当我在 glDrawElements 中使用 GL_LINE_STRIP 而不是 GL_TRIANGLES 时,我的对象按预期进行渲染,因此没有重复的顶点,但是当我反转索引顺序时,我得到了相同的效果。
这是使用 GL_TRIANGLES 渲染的对象,您可以看到这些内圈在其中渲染:
以下是带有 GL_LINE_STRIP 的对象,我觉得几何图形很好:
我的顶点着色器代码是一个标准的 MVP * 顶点位置变换,而像素着色器代码只是输出一种颜色,没有做任何其他事情。
需要说明的是,即使我反转索引,我仍然会得到与 GL_TRIANGLES 完全相同的图像,我仍然可以透过物体看到,网格内有完全相同的圆圈。
最佳答案
如果 glCullFace ( GL_FRONT);
解决了您的问题并且您打算使用光照渲染几何体,那么您应该执行以下操作之一:
您的三角形是以 CW(顺时针)方式绘制的,因此 OpenGL 计算出离您较近的三角形面朝后方并剔除它们,因为默认值为 glCullFace ( GL_BACK);
您可以简单地用 GL_FRONT
并解决问题。但是,当您要计算三角形的法线时,法线将处于相反的方向。您可以反转法线或通过在 CCW 中绘制三角形来修复法线。
关于c++ - 使用 GL_TRIANGLES 的 OpenGL 奇怪渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26582138/