面部剔除适用于GL_FRONT,但不适用于GL_BACK

时间:2017-05-24 19:38:14

标签: opengl culling

我已使用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

的图片

with GL_FRONT

(没有立方体的背面,所以你可以看到效果)。再次,这是我所期望的样子。

没有剔除它的样子:

without culling

1 个答案:

答案 0 :(得分:0)

我想分享我的经验,因为我有同样的问题: 我能够使用glCullFace(GL_FRONT)渲染某些东西,而仅使用glCullFace(GL_BACK)才能获得清晰的颜色。事实证明,OpenGL运行得很好(当然),而问题出在我使用的着色技术Deferred Shading。

我在规范化的设备坐标中使用Quad来显示照明计算的结果,并且该Quad按顺时针顺序!因此,交换此四边形的顺序,一切正常。

这会扩展到每个使用四边形在屏幕上投射出东西的人!要么在绘制之前禁用剔除,然后再启用它(由于API调用不建议使用),或者只是确保在CCW中定义了四边形。