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的主要内容,如果未能解决你的问题,请参考以下文章