OpenGL FBO深度格式和类型混淆

OpenGL FBO depth format and type confusion

我对内部格式、格式和类型有点困惑。那么深度附着点是什么?

如果我正在使用 RenderBuffer,如果我不想使用模板,我认为这是有效的代码:

glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT32F, width, height);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRB);

但是,如果我想能够读取深度值,我必须将纹理附加到深度附加点。所以我必须使用参数 "internal format"、"format" 和 "type".

调用 glTexImage2D 函数

在这种情况下,我应该选择哪种内部格式、格式和类型?我可以使用以下组合进行深度附件吗? (顺序为:内部格式、格式和类型)

GL_UNSIGNED_INT 类型对第二种情况有效吗?那个的真实意义是什么?它会为每个片段分配 4 个字节吗?在一些教程中,他们使用 GL_UNSIGNED_BYTE 作为类型参数。哪个是正确的?

谢谢

编辑:

澄清了我对哪些参数感兴趣的问题。

深度值不是颜色值。因此,如果你想在纹理中存储深度值,纹理必须使用 internal format that contains depth information.

pixel transfer format/type 参数,即使您实际上没有传递数据,也必须在内部格式方面合理。由于内部格式包含深度信息,您的像素传输格式必须指定深度信息:GL_DEPTH_COMPONENT.

至于像素转移 type,您应该将 32F 读回 GL_FLOAT