0

我已经启用了面部剔除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

这是它的外观图像GL_FRONT

与 GL_FRONT

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

没有剔除的样子:

没有剔除

4

1 回答 1

1

我想分享我的经验,因为我遇到了同样的问题:我能够用 glCullFace(GL_FRONT) 渲染一些东西,并且只能用 glCullFace(GL_BACK) 获得清晰的颜色。事实证明 OpenGL 工作得非常好(当然),问题出在我使用的着色技术,延迟着色。

我在标准化设备坐标中使用 Quad 来显示照明计算的结果,这个 Quad 是按顺时针顺序排列的!所以,交换这个四边形的顺序,一切正常。

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

于 2018-10-12T11:23:36.820 回答