OpenGL FBO深度格式和类型混淆

时间:2016-05-06 11:47:10

标签: opengl texture2d fbo

我对内部格式,格式和类型有点困惑。那么深度依恋点是什么?

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

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

但是如果我想能够读取深度值,我必须将纹理附加到深度附着点。所以我必须使用参数"内部格式","格式"来调用glTexImage2D函数。和"键入"。

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

  • GL_R32F,GL_RED,GL_FLOAT
  • GL_DEPTH_COMPONENT32,GL_DEPTH_COMPONENT,GL_UNSIGNED_INT
  • GL_DEPTH_COMPONENT32F,GL_DEPTH_COMPONENT,GL_FLOAT

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

由于

修改

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

1 个答案:

答案 0 :(得分:2)

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

pixel transfer format/type参数,即使您实际上并未实际传递数据,对于内部格式仍然必须合理。由于内部格式包含深度信息,因此您的像素传输格式必须指定深度信息:GL_DEPTH_COMPONENT

对于像素转移类型,您应该将32F作为GL_FLOAT回复。