当我使用glReadPixels()读取z缓冲区时,为什么z-buffer值始终为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;
}
答案 0 :(得分:2)
我猜你根本没有根据自己的需要正确设置上下文。需要做的是需要启用写入深度缓冲区(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错误。也许你甚至没有深度缓冲?
我希望这会有所帮助。