【问题标题】:Proper depthmap values from framebuffer来自帧缓冲区的正确深度图值
【发布时间】:2012-08-19 20:47:41
【问题描述】:

我目前从帧缓冲区获取深度图,但是值停留在 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);

【问题讨论】:

    标签: opengl depth


    【解决方案1】:
    float linearize(float depth) {
        float zNear = 0.1;
        float zFar = 100.0;
    
        return (2.0 * zNear) / (zFar + zNear - depth * (zFar - zNear));
    }
    

    深度以指数方式保存在深度纹理中。需要使用适当的近值和远值对上述代码进行线性化。

    【讨论】:

    • 这不是一个很好的答案。一些文字解释这是什么,更重要的是为什么你需要它。
    猜你喜欢
    • 2020-07-13
    • 2017-05-15
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2021-06-16
    • 1970-01-01
    相关资源
    最近更新 更多