1

現在、フレーム バッファから深度マップを取得していますが、値が 0.0 または 1.0 以上でスタックします。0.0 から 1.0 の間の深さを取得するにはどうすればよいですか?

また、フラグメント シェーダーで sampler2D として深度マップにアクセスします。

    modelsDepthTextureId = glGenTextures();
    glBindTexture(GL_TEXTURE_2D, modelsDepthTextureId);
    glTexImage2D( GL_TEXTURE_2D, 0, GL14.GL_DEPTH_COMPONENT24, screenWidth, screenHeight, 0,
        GL_DEPTH_COMPONENT, GL_INT, (java.nio.ByteBuffer) null);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
4

1 に答える 1

0
float linearize(float depth) {
    float zNear = 0.1;
    float zFar = 100.0;

    return (2.0 * zNear) / (zFar + zNear - depth * (zFar - zNear));
}

深さは、深さテクスチャに指数関数的に保存されます。上記のコードを線形化するには、適切なニア値とファー値を使用する必要があります。

于 2012-08-18T18:07:58.890 に答える