为什么当我使用glReadPixels()读取z缓冲区时,z缓冲区值总是0 ?
int main()
{
glReadPixels(0.0,0.0,width,height,GL_DEPTH_COMPONENT,GL_FLOAT,depth_data);
for(int i=0;i<10;i++)
for (int j=0;j<10;j++)
cout<<depth_data[i][j]<<endl;
return 0;
}
我猜您根本没有根据需要正确设置上下文。需要做的是写入深度缓冲区需要启用(glDepthMask(GL_TRUE);)。最初情况就是这样。此外,OpenGL要求深度测试为写入深度缓冲区的任何内容启用。如果你不希望执行深度测试,可以调用glDepthFunc来始终写入深度值。
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glDepthFunc(GL_ALWAYS); // Change this to whatever kind of depth testing you want
glDepthRange(0.0f, 1.0f);
你可能还想在读取像素数据后检查任何OpenGL错误。也许你甚至没有深度缓冲?