无法渲染深度纹理

我在使用opengl中的帧缓冲来渲染深度纹理时遇到了麻烦,我无法自己找到问题。

这里是设置:

//initialize color texture
glGenTextures(1, &color_buffer);
glBindTexture(GL_TEXTURE_2D, color_buffer);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_FLOAT, NULL); 
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_WRAP_S,GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE); 
glBindTexture(GL_TEXTURE_2D, 0);

//initialize depth texture
glGenTextures(1, &depth_buffer);  
glBindTexture(GL_TEXTURE_2D, depth_buffer); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

//bind both textures to a frame buffer
glGenFramebuffers(1, &frame_buffer); 
glBindFramebuffer(GL_FRAMEBUFFER, frame_buffer);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, color_buffer, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depth_buffer, 0);
glBindFramebuffer(GL_FRAMEBUFFER, 0);

将场景渲染到帧缓冲区后,我使用以下代码渲染纹理。 当使用color_buffer时,场景被正确绘制。 但是当我使用depth_buffer时,屏幕全是白色的。 我不确定这里有什么问题。 我的片段着色器只使用gl_FragColor = texture2D(texture_ID,texture_coord); 渲染。 我的代码有什么问题? 我如何渲染深度纹理?

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, ***color_buffer***);
glUseProgramObjectARB( program );
glUniform1i(glGetUniformLocation(program,"img"),0);
//codes that attach the texture to a quad

但是当我使用depth_buffer时,屏幕全是白色的。

我的片段着色器只使用gl_FragColor = texture2D(texture_ID,texture_coord); 渲染。

那是你的深度缓冲区。 不知道你实际渲染了什么(或者你使用的投影矩阵),无法确定。 但总的来说,透视投影往往是一个非常扭曲的转变。 它将Z偏移到[0,1]范围内更远的值,因此大多数数字将接近1而不是0。

如果你想要某种线性空间的深度值,那么你需要对它们进行线性化。 如果没有剪辑空间W与之相乘,这将会有点困难。 这是可行的,但是你需要从你的视角矩阵中得到值来做到这一点。

链接地址: http://www.djcxy.com/p/34017.html

上一篇: Unable to render depth texture

下一篇: OpenGL ES render to non POT texture