缩放 OpenGL ES 帧缓冲区的内容

Posted

技术标签:

【中文标题】缩放 OpenGL ES 帧缓冲区的内容【英文标题】:Scaling the contents of OpenGL ES framebuffer 【发布时间】:2011-11-22 17:34:25 【问题描述】:

目前我正在按比例缩小我的 OpenGL ES 1.1 帧缓冲区的内容,如下所示:

    保存当前帧缓冲区和渲染缓冲区引用 绑定 framebuffer2 和更小的 Renderbuffer 重新渲染所有内容 现在,smallerRenderbuffer 包含 帧缓冲 用smallerRenderbuffer的内容做些事情 重新绑定帧缓冲区和渲染缓冲区

有什么替代方法可以做到这一点?也许我可以将原始帧缓冲区和渲染缓冲区的内容复制并缩放到帧缓冲区 2 和较小的渲染缓冲区中。因此避免了重新渲染步骤。我一直在看glScalef,但我不确定从这里去哪里。

注意:这一切都是在 ios 上的 OpenGL ES 1.1 中完成的。

【问题讨论】:

【参考方案1】:

您可以对纹理进行初始渲染,然后将其渲染到您希望可见的帧缓冲区和小版本。无论您以何种方式看待它,您都在尝试将已渲染的数据用作另一次渲染的源,因此渲染到纹理是最自然的事情。

如果您正在处理微型版本,您可能已经熟悉渲染到纹理的语义,但为了完整起见:您将创建一个帧缓冲区对象,使用 glFramebufferTexture2DOES 附加命名纹理到合适的附着点,然后根据需要绑定帧缓冲区或纹理(如果您想要定义的行为,请确保另一个不会同时绑定)。

【讨论】:

非常感谢。就我而言,我不想修改游戏中的“主渲染”。我可以阅读代码。但是我不想修改它来渲染到纹理。所以我一直在尝试使用主帧缓冲区和渲染缓冲区的内容。我看到两个选项:重新渲染到我自己的帧缓冲区和渲染缓冲区中,或者以某种方式复制 + 缩放主帧缓冲区和渲染缓冲区中的内容。 所以主渲染是管理自己的帧缓冲区,而您无法从外部指定目标渲染缓冲区? 没错。在这种特殊情况下,我的代码只是一个寄生虫......复制+缩放填充在主渲染循环中的缓冲区的内容。

以上是关于缩放 OpenGL ES 帧缓冲区的内容的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中制作 OpenGL ES 帧缓冲区的副本?

iOS OpenGL ES Analyzer 列出“不存在的帧缓冲区附件”和“缺少帧缓冲区附件”,但 FBO 工作

如何在 iPhone OpenGL ES 2.0 中在渲染和呈现帧缓冲区之间切换?

OpenGL ES 直接到控制台帧缓冲区

在 OpenGL ES 中为帧缓冲区使用深度和模板渲染缓冲区附件

OpenGL ES 2 控制台帧缓冲光标