在OpenGL中查看深度缓冲区

Viewing depth buffer in OpenGL

本文关键字:深度 缓冲区 OpenGL      更新时间:2023-10-16

我在查看渲染到纹理的深度时遇到问题。当我将深度渲染为RGB到纹理时,我可以查看它,但当我尝试仅渲染深度时,我只得到黑色。我已经搜索了很多小时,并从其他类似的问题中进行了修复,但都无济于事。我禁用了GL_TEXTURE_COMPARE_MODE,添加了glDrawBuffer(GL_NONE)和glReadBuffer(GL_NONE)。

我在OSX 10.9和OpenGL 4.1上运行。为了简洁起见,我已经从粘贴的代码中删除了gl错误检查。

深度FBO/纹理的设置如下:

glGenFramebuffers(1, &FramebufferName);
glBindFramebuffer(GL_FRAMEBUFFER, FramebufferName);
glGenTextures(1, &renderedTexture);
glBindTexture(GL_TEXTURE_2D, renderedTexture);
glTexImage2D(GL_TEXTURE_2D, 0,
             GL_DEPTH_COMPONENT,
             fbWidth,
             fbHeight,
             0,
             GL_DEPTH_COMPONENT,
             GL_FLOAT,
             0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
//    glTexParameteri (GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY);
//    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_NONE);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, renderedTexture, 0);
glDrawBuffer(GL_NONE);
glReadBuffer(GL_NONE);
if(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
    assert(false && "framebuffer NOT OK");

深度片段-渲染RGB 时我可以看到深度

#version 150 core
#if RENDER_RGB
out vec4 outColor;
void main(){
    vec3 color = gl_FragCoord.z);
    outColor = vec4(color, 1.0);
}
#else
void main(){
    gl_FragDepth = gl_FragCoord.z;
}
#endif

回读深度纹理,我使用这个片段着色器:

#version 150 core
in vec2 UV;
uniform sampler2D renderedTexture;
out vec4 outColor;
void main(){
    vec3 color = vec3( texture(renderedTexture, UV).r );
    outColor = vec4(color, 1.0);
}

无论如何,它确实有效!我的问题是从未调用深度纹理的仅深度FBO设置。