私は対数深度バッファーを使用します: 私のシェーダーでは、ここで説明するコードを書きました。
頂点シェーダーで:
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));
}
現在、私のアルゴリズムの 1 つ (古典的な深度バッファーでうまく機能する 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 が正しい深さかどうか知っていますか?