我已使用docker images
启用了面部剔除功能,并且我试图剔除背面,但每当我glEnable(GL_CULL_FACE)
时,都无法渲染任何内容。
如果我glCullFace(GL_BACK)
它按预期工作(即渲染我的立方体内部,而不是外部)。
我试图改变绕组,但似乎不是因为glCullFace(GL_FRONT)
有效。
这可能是什么原因?
如果重要,它将被渲染到启用了深度渲染缓冲区的帧缓冲区。禁用剔除会使所有内容都按预期呈现。
修改
使用的绕组是逆时针方向,即最近的一侧:
GL_FRONT
以下是使用x, y, z
0, 0, 0
1, 0, 0
1, 1, 0
0, 0, 0
1, 1, 0
0, 1, 0
:
(没有立方体的背面,所以你可以看到效果)。再次,这是我所期望的样子。
没有剔除它的样子:
答案 0 :(得分:0)
我想分享我的经验,因为我有同样的问题: 我能够使用glCullFace(GL_FRONT)渲染某些东西,而仅使用glCullFace(GL_BACK)才能获得清晰的颜色。事实证明,OpenGL运行得很好(当然),而问题出在我使用的着色技术Deferred Shading。
我在规范化的设备坐标中使用Quad来显示照明计算的结果,并且该Quad按顺时针顺序!因此,交换此四边形的顺序,一切正常。
这会扩展到每个使用四边形在屏幕上投射出东西的人!要么在绘制之前禁用剔除,然后再启用它(由于API调用不建议使用),或者只是确保在CCW中定义了四边形。