OpenGL 渲染到 FBO

Posted

技术标签:

【中文标题】OpenGL 渲染到 FBO【英文标题】:OpenGL rendering to FBO 【发布时间】:2015-04-17 10:21:25 【问题描述】:

是否可以通过本身使用 fbos 的渲染调用渲染到 FBO? 例如这里是一些伪代码。

绑定(顶层 FBO)

渲染水

渲染阴影

渲染常规场景 等等。

解除绑定(顶层 FBO)

模糊***FBO,绽放, 使用*** FBO 生成的纹理将最终场景渲染为四边形。我有兴趣对我的最终游戏场景进行像绽放这样的后期处理。

【问题讨论】:

为什么不呢?如果需要,您可以随时将任何 FBO 绑定为渲染目标。有了这个,您可以实现一种可用于后处理的 FBO 堆栈。您还可以在渲染序列中使用通过 FBO 渲染的纹理。只是不要从纹理中读取,同时将其绑定为渲染目标;) 【参考方案1】:

如果我的问题是正确的,你想从不同的渲染结果组成最终场景,对吗?首先,这是完全可能的。如果你愿意,你可以为每个效果保留一个 FBO。但是你的伪代码缺乏效率和会影响性能。无需一直在运行时创建子 FBO。这是昂贵的操作。如果您在使用后处理阶段的管道之后,您通常需要不超过 2 个 FBO(屏幕外)。还请始终记住具有由上下文创建的默认 FBO(前、后、左、右)。因此,您可以将 3D 内容渲染到 FBO -1,而不是使用其纹理作为 FBO-2 的源来应用后处理效果。然后 blit结果进入默认屏幕FBO。

我看不出为每个效果创建 FBO 的理由。执行仍然是串行的。也就是说,您在效果之后渲染效果,因此您可以一次又一次地重用同一个 FBO。另外,您可以考虑,而不是多个 FBO使用一个 FBO 的多个渲染缓冲区或纹理附件,并决定您要将内容渲染到哪一个。

【讨论】:

以上是关于OpenGL 渲染到 FBO的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL:渲染到 FBO 时是不是支持纹理组合器功能?

OpenGL 渲染到 FBO

Opengl:渲染到立方体贴图?

OpenGL + QT:渲染到纹理并显示回来

将 OpenGL 渲染保存到图像文件

OpenGL4 多重采样抗锯齿和渲染到纹理