opengl使用深度缓冲区进行阴影 - 任何理由不仅仅是将z渲染为tex而不是使用深度缓冲区?

时间:2014-03-13 05:33:17

标签: opengl depth-buffer shadow-mapping

所以我正致力于实现阴影映射。到目前为止,我已经从相机的角度将几何体(深度,法线,颜色)渲染到帧缓冲区,并从光的角度渲染几何体的深度。现在,我从相机的角度渲染光照,并且对于每个片段,我将其与光的距离与来自渲染的深度tex值进行比较。 the-lights-pov通过。如果距离更远,则它处于阴影中。 (只是在这里重新确认,以确保没有任何我不知道的事情我不明白。)

所以,要做到最后一步,我需要将深度值[0-1]转换为其眼睛空间值[0.1-100](我的近/远平面)。 (这里的解释 - Getting the true z value from the depth buffer)。

是否有任何理由不反过来只是让渲染来自光源的pov传递只是直接写入片段到相机(z分量)的纹理?然后我们不必处理荒谬的转换?或者我错过了什么?

1 个答案:

答案 0 :(得分:4)

您当然可以将自己的深度值写入纹理,很多人都会这样做。这样做的好处是你可以选择你喜欢的任何表示和映射。

缺点是你必须a)仍然有一个“真正的”深度缓冲器连接到你的FBO(因此加倍你用于深度写入的带宽),或b)使用GL_MIN / GL_MAX混合模式(取决于您如何映射深度)并可能错过早期优化。