所以我正在努力实现阴影映射。到目前为止,我已经从相机的角度渲染了几何图形(深度、法线、颜色)到帧缓冲区,并从光线的角度渲染了几何图形的深度。现在,我正在从相机的角度渲染灯光,对于每个片段,我将比较它与灯光的距离,以及从render-from-the-lights-pov通道获得的深度值。如果距离更大,它就在阴影中。(只是在这里重述一下,以确保没有什么我没有意识到我不明白的)。
所以,为了完成最后一步,我需要将深度值[0-1]转换为它的眼距值[0.1-100](我的近/远平面)。(这里的解释-从深度缓冲区获取真正的z值)。是否有任何理由不直接将片段到相机的距离(z分量)直接写入纹理,而只是让render-from-the-lights-pov通道?那我们就不用处理荒谬的转换了?还是我错过了什么?
你当然可以给纹理写你自己的深度值,很多人就是这么做的。这样做的好处是,您可以选择任何您喜欢的表示和映射。
的缺点是,你必须要么a)仍然有一个"真正的"深度缓冲区附加到你的FBO(因此加倍带宽你正在使用深度写入),或b)使用GL_MIN/GL_MAX混合模式(取决于你如何映射深度),并可能错过早期z - out优化。