4

我正在学习如何使用来自以下资源的立方体贴图绘制天空盒。

我已经到了他谈到我们如何优化天空盒渲染的部分。我明白了,而不是先渲染天空盒,这将导致width*height计算视口片段然后只被其他对象透支,最好最后绘制它并1.0f通过分配gl_Position天空盒来伪造它的深度值由于透视分割,顶点着色器gl_Position = pos.xyww基本上使每个gl_FragCoord.z等于。1.0f

现在我们得到一个天空盒,它的每个片段都具有最大深度值,1.0f他将深度函数更改为GL_LEQUAL而不是GL_LESS.

这是我有点困惑的地方。
如果我们最后渲染天空盒并且它的深度值等于1.0f为什么我们需要将深度函数更改为GL_LEQUAL?将其设置为是否足够,GL_LESS因为如果我们渲染场景中的所有其他对象,它的深度值可能会小于1.0f所以它会将其值写入z-buffer小于的值1.0f。现在,如果我们将天空盒的深度函数设置为GL_LESS它,那么它只会传递深度值小于实际值的片段,z-buffer这可能只会传递其他对象没有覆盖的片段,那么为什么我们需要GL_LEQUAL?

4

1 回答 1

5

当您最初在帧开始时清除帧缓冲区时,您可能将值设为 1.0f。因此,如果您想绘制天空盒,您需要允许天空盒在深度值已清除的区域中绘制。

于 2019-11-04T14:44:13.907 回答