Tôi sử dụng bộ đệm độ sâu logarit: trong trình đổ bóng của tôi, tôi đã viết mã mô tả here.Bộ đệm độ sâu lôgarit
Trong vertex shader:
void main()
{
vec4 vertexPosClip = gl_ModelViewProjectionMatrix * gl_Vertex;
gl_Position = vertexPosClip;
gl_TexCoord[6] = vertexPosClip;
}
Trong shader đoạn:
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));
}
Bây giờ trong một trong những thuật toán của tôi (SSAO mà hoạt động tốt với một bộ đệm sâu cổ điển), tôi muốn khôi phục chiều sâu của mảnh của tôi. Đây là công thức tôi sử dụng:
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;
Tuy nhiên nó không hoạt động, thuật toán không hoạt động nữa. Bạn có biết nếu z tôi đã tính toán là độ sâu chính xác?