好的,所以我有 4 个缓冲区、3 个 FBO 和一个渲染缓冲区。让我解释一下。
我有一个 View FBO,它会在我将场景渲染到渲染缓冲区之前存储它。
我有一个背景缓冲区,其中包含场景的背景。
我有一个用户缓冲区,由用户操作。
当用户执行某些操作时,我会使用一些混合绘制到用户缓冲区。
然后重绘整个场景我想做的是清除 View 缓冲区,将背景缓冲区绘制到 View 缓冲区,更改混合,然后将用户缓冲区绘制到 View 缓冲区。最后将 View 缓冲区渲染到渲染缓冲区。
但是我不知道如何将一个 FBO 绘制到另一个 FBO。我想做的基本上是合并和混合两个 FBO,但我不知道该怎么做!我是 OpenGL ES 的新手,非常感谢您的帮助。
最佳答案
设置您的屏幕外帧缓冲区以直接渲染到纹理。此链接向您展示了如何:
为了我和你的利益,让我花点时间来描述帧缓冲区和渲染缓冲区。帧缓冲区就像一个接受 OpenGL 渲染命令的端口。在您可以看到或使用渲染输出之前,它必须附加到纹理或渲染缓冲区。您可以选择使用 glFramebufferTexture2DOES
附加纹理或使用 glFramebufferRenderbufferOES
附加渲染缓冲区。渲染缓冲区就像一个保存渲染结果的光栅图像。光栅图像的存储由 OpenGL 管理。如果您希望图像出现在屏幕上而不是屏幕外缓冲区,您可以使用 -[EAGLContext renderBufferStorage:fromDrawable:]
将 EAGLContext 的存储与渲染缓冲区一起使用。此代码位于 OpenGL ES 项目模板中。
您可能不需要 View 帧缓冲区,因为在将场景背景和用户层渲染为纹理后,您可以将这些纹理绘制到渲染缓冲区中(即,绘制到与屏幕渲染缓冲区关联的帧缓冲区中)。
关于iphone - 如何合并两个FBO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2519567/