如何合并两个FBO?

时间:2010-03-25 21:32:04

标签: iphone objective-c opengl-es

好的,所以我有4个缓冲区,3个FBO和一个渲染缓冲区。让我解释一下。

我有一个视图FBO,它会在我将它渲染到渲染缓冲区之前存储场景。

我有一个背景缓冲区,其中包含场景的背景。

我有一个用户缓冲区,用户可以操作。

当用户做出一些动作时,我使用一些混合来绘制到用户缓冲区。

然后重绘整个场景我想要做的是清除视图缓冲区,将后台缓冲区绘制到视图缓冲区,更改混合,然后将用户缓冲区绘制到视图缓冲区。最后将视图缓冲区渲染到渲染缓冲区。

然而,我无法弄清楚如何将FBO绘制到另一个FBO。我想要做的主要是合并和混合两个FBO,但我无法弄清楚如何!我是OpenGL ES的新手,所以感谢所有的帮助。

1 个答案:

答案 0 :(得分:2)

设置屏幕外框架缓冲区以直接渲染纹理。此链接显示了如何:

http://developer.apple.com/iphone/library/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/WorkingwithEAGLContexts/WorkingwithEAGLContexts.html#//apple_ref/doc/uid/TP40008793-CH103-SW7

让我花一点时间来描述帧缓冲区和渲染缓冲区,为了我的利益和你的利益。帧缓冲区就像一个接受OpenGL渲染命令的端口。在您可以查看或使用渲染输出之前,必须将其附加到纹理或渲染缓冲区。您可以选择使用glFramebufferTexture2DOES附加纹理还是使用glFramebufferRenderbufferOES附加渲染缓冲。渲染缓冲区就像一个光栅图像,可以保存渲染结果。光栅图像的存储由OpenGL管理。如果您希望图像显示在屏幕上而不是屏幕外缓冲区,则使用-[EAGLContext renderBufferStorage:fromDrawable:]将EAGLContext的存储与renderbuffer一起使用。此代码位于OpenGL ES项目模板中。

您可能不需要视图帧缓冲,因为在将场景背景和用户图层渲染到纹理后,您可以将这些纹理绘制到渲染缓冲区中(即,与屏幕渲染缓冲区关联的帧缓冲区)。