好的,我有4个缓冲区,3个FBO和一个渲染缓冲区。让我解释一下。
我有一个视图FBO,它将存储场景,然后再将其渲染到渲染缓冲区。
我有一个背景缓冲区,其中包含场景的背景。
我有一个用户缓冲区,用户可以操作它。
当用户进行一些操作时,我使用一些混合将其绘制到用户缓冲区。
然后要重新绘制整个场景,我要做的是清除视图缓冲区,将背景缓冲区绘制到视图缓冲区,更改混合,然后将用户缓冲区绘制到视图缓冲区。最后将视图缓冲区渲染到渲染缓冲区。
但是我不知道如何把一个FBO吸引到另一个FBO。我想做的基本上是合并和混合两个FBO,但我不知道如何!我对opengl es很陌生,所以谢谢你的帮助。
最佳答案
设置屏幕外帧缓冲区以直接渲染到纹理。此链接显示如何:
http://developer.apple.com/iphone/library/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/WorkingwithEAGLContexts/WorkingwithEAGLContexts.html#//apple_ref/doc/uid/TP40008793-CH103-SW7
为了我和你的利益,让我花点时间来描述帧缓冲区和渲染缓冲区。帧缓冲区就像一个接受opengl渲染命令的端口。它必须附加到纹理或renderbuffer,然后才能看到或使用渲染输出。可以在使用glFramebufferTexture2DOES
附加纹理或使用glFramebufferRenderbufferOES
渲染缓冲之间进行选择。renderbuffer类似于保存渲染结果的光栅图像。光栅图像的存储由opengl管理。如果希望图像显示在屏幕上而不是屏幕外缓冲区,可以使用-[EAGLContext renderBufferStorage:fromDrawable:]
将eaglContext的存储与renderBuffer一起使用。此代码位于opengl es项目模板中。
您可能不需要视图帧缓冲区,因为在将场景背景和用户层渲染为纹理后,可以将这些纹理绘制到renderbuffer(即,与屏幕上的renderbuffer关联的帧缓冲区中)。