如何使对数深度缓冲线性化?
在片段着色器中实现对数深度缓冲的线性可视化。
在片段着色器中实现对数深度缓冲的线性可视化。
float n = 1.0; // camera z near
float f = 27000000.0; // camera z far
float z = texture( DepthTex, TexCoord ).x;
float d = (2.0 * n) / (f + n - z * (f - n));
FragColor=vec4(d,d,d,1);
球体顶点着色器
vec4 ClipCoords(vec3 position,mat4 matrix)
{
vec4 clip = matrix * vec4(position,1.0f);
clip.z =((2.0f * log(1.0f * clip.z + 1.0f) / log(1.0f * 27000000.0f + 1.0f)) - 1.0f) * clip.w;
return clip;
}
gl_Position = ClipCoords(position,matrix);
左侧显示对数深度缓冲线性化的不足,而右侧显示没有使用 log
的线性化,只是使用了 gl_Position = matrix * vec4(position,1.0f);
![enter image description here](https://istack.dev59.com/O1u9R.webp)
C
(和在较小程度上far
)是什么?我假设 far 是 FrustumFar 吗? - Richard Tingle