我使用对数深度缓冲:在我的着色器中,我编写了描述这里的代码。
在片段着色器中:
在顶点着色器中:
void main()
{
vec4 vertexPosClip = gl_ModelViewProjectionMatrix * gl_Vertex;
gl_Position = vertexPosClip;
gl_TexCoord[6] = vertexPosClip;
}
在片段着色器中:
void main()
{
gl_FragColor = ...
const float C = 1.0;
const float far = 1000000000.0;
const float offset = 1.0;
gl_FragDepth = (log(C * gl_TexCoord[6].z + offset) / log(C * far + offset));
}
现在,在我的一个算法中(SSAO算法,它可以很好地与经典的深度缓冲区配合使用),我想恢复片段的深度。这里是我使用的公式:
const float C = 1.0;
const float far = 1000000000.0;
const float offset = 1.0;
//depth
z=(pow(C*far+offset,depth_in_depth_buffer)-offset)/C;
然而它不起作用了,算法不再起作用。你知道我计算的z值是否是正确的深度吗?