我做一些基本的
1) 计算我的职位
2) 将其存储到"gl_Position"
3) 然后我根据我的位置信息将我的深度存储到vec2中
gl_Position = vec4( vVertexPos, 1 ) * mMVP;
vDepth = gl_Position.zw;
vDepth是着色器中的一个变量,我将其传递给片段着色器
out vec2 vDepth;
在片段着色器中,我将片段深度存储在gl_FragDepth 中
gl_FragDepth = vDepth.x / vDepth.y;
我的深度值都接近1。我是不是做错了什么?我可能会错过一个步骤,这将给我我的线性深度值?当我计算我的相机信息时,我的近剪裁是0.01,远剪裁是200.0f,我需要近剪裁在这个剪裁空间附近。
近平面离查看器越近,深度缓冲精度使用得越快。将你的近平面从眼睛向外推,但与远平面保持相同的距离,会使你在整个视图体积中的深度精度均匀。您的vDepth也根据1/w以透视正确的方法进行插值。
除非您想要默认行为(即gl_FragDepth = gl_FragCoord.z
)之外的其他内容,否则不应在片段着色器中设置gl_FragDepth
请参阅:http://www.arcsynthesis.org/gltut/Illumination/Tut13%20Deceit%20in%20Depth.html为什么这对性能不利。