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.0fi,需要近端在该剪裁空间附近。

4

2 回答 2

4

近平面离观察者越近,深度缓冲精度越接近观察者使用的速度越快。将您的近平面从眼睛中推出,但与远平面保持相同的距离将使您在整个视图体积中的深度精度保持平衡。您的 vDepth 也会根据 1/w以透视正确的方法进行插值。

于 2014-09-10T03:57:14.133 回答
1

You shouldn't set gl_FragDepth in the fragment shader unless you want something other than the default behavior (ie, gl_FragDepth = gl_FragCoord.z)

See: http://www.arcsynthesis.org/gltut/Illumination/Tut13%20Deceit%20in%20Depth.html for why this is bad for perf.

于 2014-09-10T02:36:30.590 回答