【问题标题】:Viewing depth buffer in OpenGL在 OpenGL 中查看深度缓冲区
【发布时间】:2014-12-11 22:07:00
【问题描述】:

我无法查看渲染到纹理的深度。当我将深度作为 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);
}

【问题讨论】:

    标签: c++ opengl glsl


    【解决方案1】:

    没关系,它确实有效!我的问题是从未调用过深度纹理的仅深度 FBO 设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      • 2014-03-27
      相关资源
      最近更新 更多