[OpenGL学习] 缓冲区

时间:2021-05-16 16:08:28

缓冲区: 

1 颜色缓冲区(COLOR_BUFFER):

颜色缓冲区就是帧缓冲区(FRAME_BUFFER),你需要渲染的场景最终每一个像素都要写入该缓冲区,然后由它在渲染到屏幕上显示; 

双缓存的情况下,帧缓冲区包括前缓冲(GL_FRONT)和后缓冲(GL_BACK)。

例子1:读入一张图像要作为纹理,一开始读入的时候是要放在后缓冲区,要显示的时候,就放到前缓冲区,glSwapBuffer()是用来实现由后缓冲到前缓冲。

例子2:我们现在后缓冲区将图形的每一部分绘制完全,然后用glSwapBuffer()将这个图像转到前缓冲区里显示,如果直接就在前缓冲区,那我们一开始看到的只是图像的一部分,我们会看到绘制过程,到其完全绘制好。

 

2 深度缓冲区(DEPTH_BUFFER):

深度缓冲区与帧缓冲区对应,用于记录上面每个像素的深度值,通过深度缓冲区,我们可以进行深度测试,从而确定像素的遮挡关系,保证渲染正确;

PS:现实世界里的物体投影到平面,存在遮挡关系,要在荧幕显示的时候要进行深度测试,确定显示哪个物体。 

3 模版缓冲(STENCIL_BUFFER):

模版缓冲与深度缓冲大小相同,通过设置模版缓冲每个像素的值,我们可以指定在渲染的时候只渲染某些像素,从而可以达到一些特殊的效果.

(以上转自http://www.cnblogs.com/tekkaman/archive/2011/11/16/2250938.html,并添加了部分内容) 

4 累积缓冲区(ACCUM_BUFFER):

主要作用是允许颜色缓冲区的内容不直接显示到窗口上

作用过程:

(1)内容从颜色缓冲区 复制 到累积缓冲区;

(2)根据不同的方法,将颜色缓冲区的内容与在累积缓冲区的内容进行反复混合;

(3)将最终结果从累积缓冲区 复制 回颜色缓冲区;

(4)由颜色缓冲区直接显示到窗口上。

PS:由于积累缓冲区操作需要复制大量的内存并进行大量的处理,所以很少使用这个功能。