5

私は対数深度バッファーを使用します: 私のシェーダーでは、ここで説明するコードを書きました。

頂点シェーダーで:

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 が正しい深さかどうか知っていますか?

4

1 に答える 1