【发布时间】:2017-05-24 19:38:14
【问题描述】:
我已使用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 的图像:
(没有立方体的背面,所以可以看到效果)。再说一次,这就是我所期望的样子。
以及没有剔除的样子:
【问题讨论】:
-
面部剔除基于三角形的缠绕顺序。而且由于我们看不到您的三角形,据我们所知,它们似乎都使用相同的顺序。提供minimal reproducible example。
-
好吧,当
GL_FRONT完美运行时,它不会真的是曲折,不是吗?即使绕组不好,它也会呈现一些东西?为问题添加了绕线。 -
只是一个猜测,但如果您使用定向光并且没有环境光,那么渲染的背面将是黑色的......除非您使用双面光照计算。
-
移除光照计算并在着色器中执行
fragColor = texture(tex, texCoordV)并没有改变任何东西(显然,除了移除光照)