OpenGL优化Skybox渲染

Jor*_*yen 4 opengl zbuffer depth-testing skybox

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

我已经到了他谈到如何优化天空盒渲染的部分。我得到的不是代替先渲染天空盒,而是先width*height计算视口片段,然后才被其他对象覆盖,最好是最后绘制它,并1.0f通过分配gl_Position天空盒的伪造其深度值顶点着色器由于透视划分而gl_Position = pos.xyww实质上使每个gl_FragCoord.z相等1.0f

现在,我们得到一个天空盒,其中每个片段的最大深度值为,1.0f他将深度函数更改GL_LEQUALGL_LESS

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

Nic*_*las 5

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