-1

为什么当我使用 glReadPixels() 读取 z-buffer 时 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;
}
4

1 回答 1

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

我希望这有帮助。

于 2013-04-15T05:06:45.353 回答