关于帧缓存的总结

关于帧缓存的总结

本来想带上例子的,发现自己懂得太晚了,没必要了。写下自己的理解就行了。

1. 缓冲区

 缓冲区是一块内存或在相应硬件中开辟的空间,目的是为了保存像素数据中的相关信息。

根据缓存中不同的作用,和功能分为颜色缓冲、模板缓冲、深度缓冲、积累缓冲等(有的根据具体作用还有其他缓冲)。同意成称为 帧缓存!

2. 概念、原理、OpengGL实现

     2.1颜色缓冲区

颜色缓冲区的作用就是实现存储要显示在屏幕上的,经过管线处理变化后的颜色准备显示到屏幕上。颜色缓冲区主要包括:支持立体显示的左右缓冲区,支持动画的前后缓冲区(ps:动画这里表示实现在后缓冲区实现绘图后  通过交换缓冲区交换到前缓冲区,不再显示绘画过程)。 类似 辅助库auxSwapBuffers();实现的前后缓冲的交换。

 

     2.2深度缓冲区

深度缓冲区保存像素的深度值。深度值是因三维世界的兴起而提出的,图形学中(在绘画专业估计早有此概念,毕竟好多算法实现都是从画家那里得来的)。深度缓冲区也叫Z-buffer 所以,每个像素的z坐标即为它的深度。

深度缓冲在立体图形消隐等算法中广为应用。

 

    2.3模板缓冲区

模板缓冲区作用比较奇特。模板的作用是实现渲染区域按照程序设计的方式实现。比如:如果让你实现在显然区域中一个小的正方形显示渲染,你可能会想到用剪切就行了。但是,如果让你实现一个五角星里面渲染呢? 这时候用 模板 最为方便。

模板的应用过程就是在模板缓冲区内设定好要显示渲染的形状,开启目标测试,通过检测的像素渲染,没有通过的丢弃。就会出现想要的效果:在一个五角星里有我们渲染的东西,其他地方看不见。

    2.4积累缓冲区

积累缓冲区字面意思,实现了颜色的积累实现一些特殊的效果。

3. 缓冲区的操作

     3.1缓冲区的清除

为了防止缓冲区内的数据对绘图的影响,在绘图之前要对缓冲区实行清除操作。

过程: 首先设置清除值。如:

设置颜色清除值 glClearColor(r,g,b,a)

设置深度清除值 glClearDepth(dep)

设置模板清除值 glClearStencil(int a);

           然后 设置清除项 glClear();

 

参数包括 GL_DEPTH_BUFFER_BIT

GL_COLOR_BUFFER_BIT

GL_ACCUM_BUFFER_BIT

GL_STENCIL_BUFFER_BIT

以上几个参数可以 相互进行或后作为参数给glColor();

 

3.2缓冲屏蔽

所谓缓冲屏蔽,可以理解为缓冲区是否可写,当我们对缓冲区添加屏蔽时,并没有停止相应测试,而是缓冲区一直没有变。

 

3.3测试

http://bochuang.sinaapp.com/forum.php?mod=viewthread&tid=49&extra=page%3D1 

 


作者:leisure
原文出自:http://www.cnblogs.com/leisure/
感谢园子,感谢各位支持。本文版权归伟征和博客园共有,欢迎转载@ 但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
只是想分享,欢迎拍砖!促进我成长

原文地址:https://www.cnblogs.com/leisure/p/2508955.html