我的openGL渲染深度几乎是1的值,这是为什么



我做一些基本的

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为什么这对性能不利。

相关内容

  • 没有找到相关文章

最新更新