【发布时间】:2016-09-01 11:31:26
【问题描述】:
我对内部格式、格式和类型有点困惑。那么深度附着点呢?
如果我使用的是 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 作为类型参数。哪个是正确的?
谢谢
编辑:
澄清了我对哪些参数感兴趣的问题。
【问题讨论】:
-
“格式”和“类型”是什么意思?渲染缓冲区只有内部格式,没有外部格式。或者您是在问应该在
glReadPixels通话中使用哪种外部格式? -
根据 Khronos Group 参考页面,您只能使用以下格式作为渲染缓冲区的内部格式:GL_RGBA4、GL_RGB565、GL_RGB5_A1、GL_DEPTH_COMPONENT16 或 GL_STENCIL_INDEX8 glRenderbufferStorage reference page
-
@peppe:“你是什么意思,“格式”和“类型”?”他说的是像素传输参数。最后三个参数为
glTexImage2D。 -
@Matso 您提供的链接指向 OpenGL ES 文档。 OpenGL 有更多支持的格式。
-
重申上面@peppe 的问题:“读取深度值”是什么意思?如果附件是渲染缓冲区,您可以使用
glReadPixels()。您的意思是要在着色器代码中对深度图像进行采样?