OpenGL(FBO)中的普通后台缓冲区+渲染到深度纹理

Posted

技术标签:

【中文标题】OpenGL(FBO)中的普通后台缓冲区+渲染到深度纹理【英文标题】:Normal back buffer + render to depth texture in OpenGL (FBOs) 【发布时间】:2011-03-11 22:39:17 【问题描述】:

情况如下:我有一个包含一些深度值的纹理。我想使用该纹理作为深度缓冲区来渲染一些几何图形,但我希望将颜色写入普通帧缓冲区(即窗口的帧缓冲区)。

我该怎么做?我尝试创建一个 FBO 并仅将深度纹理绑定到它(GL_DEPTH_COMPONENT),但这不起作用;没有任何颜色出现。

【问题讨论】:

【参考方案1】:

不,你不能。您正在渲染的 FBO 可能是主帧缓冲区或离屏缓冲区。你不能以任何方式混合它们。

相反,我建议您渲染到颜色渲染缓冲区,然后在主帧缓冲区中执行简单的 blitting 操作。

编辑-1。

或者,如果您已经在主 FB 中有深度,您可以先对深度进行 blit,然后渲染到主 FB,从而在额外的颜色渲染缓冲区中节省视频内存。

附: Blitting 是通过glBlitFramebuffer 完成的。为了让它工作,你应该为它们每个设置GL_READ_FRAMEBUFFERGL_DRAW_FRAMEBUFFER和glDrawBuffer()。

【讨论】:

在主/窗口帧缓冲区中的渲染被屏蔽到仅窗口的可见部分,即窗口被遮挡的地方没有内容写入主/窗口帧缓冲区。如果系统使用合成桌面(XComposite/Copmiz,Windows Vista/7 Aero),则不会发生窗口遮挡,但如果没有合成或禁用此蒙版。

以上是关于OpenGL(FBO)中的普通后台缓冲区+渲染到深度纹理的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL:使用多个纹理渲染到 FBO

OpenGL渲染到多个纹理,结果是白色的

在 OpenGL 中处理 FBO 的最佳方法是啥?

OpenGL:使用 FBO 和视口偏移问题渲染到纹理

为啥在使用 FBO 进行多重采样时,OpenGL 会使我的场景变亮?

OpenGL ES FBO 缩放