learnopengl——帧缓冲

原文网址:https://learnopengl.com/Advanced-OpenGL/Framebuffers

帧缓冲
到目前为止,我们使用了几种类型的屏幕缓冲:用于写入颜色值的颜色缓冲,用于写入深度值的深度缓冲。还有一个允许丢弃指定像素的模板缓冲。所有的这些缓冲的集合都叫做帧缓冲,它存储器内存的指定位置。OpenGL允许我们自己定义自己的帧缓冲,因此我们可以定义我们自己的颜色缓冲,深度以及模板缓冲。

到目前为止我们的渲染操作都是基于绑定到默认缓冲的渲染缓冲。默认缓冲在创建窗口的时候被创建和配置。我们也可以自己创建帧缓冲。

应用程序的帧缓冲也许暂时还没有什么意义,但是渲染你的场景到不同的帧缓冲,可以创建一个场景的镜像或者做些后期处理效果。首先,我们要介绍帧缓冲是如何工作的,然后才能利用它来做些炫酷的后期效果。

创建帧缓冲
像其他OpenGL对象一样,我们可以创建帧缓冲对象,简称FBO,创建函数为:glGenFramebuffers

unsigned int fbo;
glGenFramebuffers(1, &fbo);

这个代码已经看到很多次了,它的使用方式和其他对象类似。首先要创建帧缓冲对象、绑定它作为激活的帧缓冲、或者是解绑这个帧缓冲。使用glBindFramebuffer,绑定帧缓冲:

glBindFramebuffer(GL_FRAMEBUFFER, fbo);  

绑定GL_FRAMEBUFFER目标之后,接下来的所有的读和写帧缓冲操作将会影响当前绑定的帧缓冲。我们同样可以把帧缓冲绑定到只有读功能、或者只有写功能的帧缓冲,比如GL_READ_FRAMEBUFFER 和 GL_DRAW_FRAMEBUFFER。绑定到GL_READ_FRAMEBUFFER的帧缓冲,会被比如glReadPixels读取操作。绑定到GL_DRAW_FRAMEBUFFER的帧缓冲,会被用作渲染、清除和其他的写操作。大多数情况下,你不需要区分是读还是写,所以你直接绑定到具有读写功能的GL_FRAMEBUFFER目标即可。

如果帧缓冲不完整,那么不能被使用。帧缓冲完整需要满足下面的四个条件:
1.必须绑定到至少一个缓冲(颜色、深度后者是模板)
2.至少有一个颜色

猜你喜欢

转载自blog.csdn.net/wodownload2/article/details/83690409