2014-10-16 166 views
1

我無法查看渲染到紋理的深度。當我將深度渲染爲RGB紋理時,我可以查看它,但是當我嘗試渲染深度時,我只能看到黑色。我已經搜索了很多小時,並從其他類似問題中進行修復,但無濟於事。我禁用了GL_TEXTURE_COMPARE_MODE,添加了glDrawBuffer(GL_NONE)和glReadBuffer(GL_NONE)。在OpenGL中查看深度緩衝區

我在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); 
} 

回答

2

沒關係,它確實有用!我的問題是深度紋理的深度FBO設置從未被調用過。