使用帧缓冲离屏渲染
到目前为止,我们已经使用了很多屏幕缓冲了:用于写入颜色值的颜色缓冲、用于写入深度信息的深度缓冲,这些缓冲结合起来叫做帧缓冲(Framebuffer),它被储存在GPU内存中的某处。WebGL允许我们定义我们自己的帧缓冲,也就是说我们能够定义我们自己的颜色缓冲,甚至是深度缓冲、模板缓冲。
我们目前所做的所有操作都是在默认帧缓冲的渲染缓冲上进行的。默认的帧缓冲是在你创建窗口的时候生成和配置的(GLFW帮我们做了这些)。通过创建我们自己的帧缓冲,我们可以获得额外的渲染目标(target),也被称作离屏渲染。
你可能不能很快理解它的应用,但渲染你的场景到不同的帧缓冲能够让我们在场景中加入类似镜子的东西,或者做出很酷的后期处理效果。它的整个过程是把当前的场景作为一张纹理保存到显存中,然后再去其他场景中使用这个纹理,最终以一种特别的效果显示到屏幕上。
在我们库中支持WebGL的帧缓冲离屏渲染,并对底层复杂的接口进行了封装,提供了开发者友好的接口。这里让我们通过一个例子看看如何应用它。
您需要做两件事:
-
开辟颜色缓冲区(颜色FBO):在当前屏幕缓冲区之外新开辟一个颜色缓冲区进行渲染操作。
-
将场景渲染到颜色缓冲区:将某个场景的渲染结果,也就是颜色缓冲,保存到该缓冲区中