当我使用glReadPixels()读取z缓冲区时,为什么z-buffer值总是0?

时间:2013-04-14 08:05:37

标签: opengl zbuffer

当我使用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;
}

1 个答案:

答案 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错误。也许你甚至没有深度缓冲?

我希望这会有所帮助。