OpenGL - 使用glReadPixels读取深度组件返回不正确的值

时间:2014-01-15 13:59:14

标签: c++ opengl framebuffer depth

我正在尝试读出只有深度成分的纹理的像素,但glReadPixels给我一个数组,其中每个值= 1。

纹理/帧缓冲区创建:

GLuint frameBuffer;
glGenFramebuffers(1,&frameBuffer);
glBindFramebuffer(GL_FRAMEBUFFER,frameBuffer);

GLuint texture;
glGenTextures(1,&texture);
glBindTexture(GL_TEXTURE_2D,texture);
glTexImage2D(GL_TEXTURE_2D,0,GL_DEPTH_COMPONENT,width,height,0,GL_DEPTH_COMPONENT,GL_FLOAT,0);
glFramebufferTexture(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,m_depthTexture,0);

从纹理中读取:

glBindFramebuffer(GL_FRAMEBUFFER,frameBuffer);
float *depths = new float[width *height];
glReadPixels(0,0,width,height,GL_DEPTH_COMPONENT,GL_FLOAT,&depths[0]);
// glGetError reports no errors, but every value inside 'depths' is 1.
delete[] depths;

我没有将实际渲染包含在纹理中,因为我知道它可以正常工作。 这是我在主屏幕帧缓冲区上绘制深度纹理时的样子:

它绝对不是空的,为什么它告诉我所有像素的深度都是1?

1 个答案:

答案 0 :(得分:1)

由于您使用的是桌面OpenGL版本,我建议您使用glGetTexImage而不是glReadPixels。