c++ - 使用 GL_TRIANGLES 的 OpenGL 奇怪渲染

标签 c++ opengl graphics

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

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

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

http://imgur.com/4ocO2Bt

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

http://imgur.com/f0wGNC1

我的顶点着色器代码是一个标准的 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/

相关文章:

c++ - 如何压缩(组合迭代器)不处理 boost::prior

c++ - 警告 : 'void checkGlError(const char*)' used but never defined

algorithm - 将重叠的三角形合并为多​​边形

c++ - 这看起来像什么伪代码?

delphi - 创建透明位图并UpdateLayeredWindow

c++ - 通过提高新 C++ 代码的警告级别来强制构建的好方法

c++ - final 在虚函数上的奇怪行为

windows - 在没有硬件加速的情况下在 Windows 上部署 Qt5

c++ - 导出对象渲染opengl

c++ - 使用 GLUT 按键停止动画?