帧缓存操作glClearColor、glClear、glClearDepth

一、glClearColor

函数原型:

void glClearColor(GLclampf red,GLclampf green,Glclampf blue,GLclampf alpha)

(GLclampf为在0和1之间的32位浮点型小数)

函数功能:

specify clear values for the color buffers.为颜色缓冲区指定确定的值。

函数参数:

指定red,green,blue,alpha(红、绿、蓝、透明)的值,当颜色缓冲区清空时使用。默认值都是0.

描述:

1、glClearColor指定红绿蓝和透明的值,当glColor清除了颜色缓冲区后使用。

2、被glClearColor指定的值,其取值范围在[0,1]。

3、在glClearColor在glBegin和与glBegin相对应的glEnd之间调用时,会产生GL_INVALID_OPEARTION错误。

二、glClear

函数原型:

void glClear(GLbitfield mask);

函数功能:

将缓存清除为预先的设置值。

函数参数:

GLbitfield:可以使用|(或)运算符组合不同的缓存标志位,表明需要清除的缓冲,例如glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)表示要清除颜色缓冲以及深度缓冲,可以使用以下标志位:

1、GL_COLOR_BUFFER_BIT:当前可写的颜色缓冲

2、GL_DEPTH_BUFFER_BIT:深度缓冲

3、GL_ACCUM_BUFFER_BIT:累积缓冲

4、GL_STENCIL_BUFFER_BIT:模板缓冲

描述:

glClear()函数的作用是用当前缓冲区清除值,也就是glClearColor或者glClearDepth()、glClearIndex()、glClearStencil()、glClearAccum()等函数所指定的值来清除指定的缓冲区,也可以使用glDrawBuffer一次清除多个颜色缓存。比如:

glClearColor(0.0,0.0,0.0,0.0);

glClear(GL_COLOR_BUFFER_BIT);

第一条语句表示清除颜色设为黑色,第二条语句表示实际完成了把整个窗口清除为黑色的任务,glClear()的唯一参数表示需要被清除的缓冲区。

像素检验、裁剪检验、抖动和缓存的写屏蔽都会影响glClear的操作,其中,裁剪范围限制了清除的区域,而glClear命令还会忽略alpha函数、融合函数、逻辑操作、模板、纹理映射和z缓存。

注意:

如果没有呈现缓冲区,那么指向那个缓冲区的glClear无效。

三、glClearDepth

函数原型:

void glClearDepth(GLclampd depth);

函数功能:

设置深度缓存的清除值。

函数参数:

depth ---- 指定清除深度缓存时使用的深度值

描述:

本函数指定用glClear清除深度缓存时所使用的深度值,该值范围在[0,1]之间。

在现实生活中,一个实心物体挡在另外一个实心物体的前面, 后面的那个物体有部分会被遮盖掉

那么opengl里面如何模拟这个情况呢? 每个物体的每个像素都有一个深度缓存的值(在0到1之间,可以想象成是z轴的距离)

如果glDepthFunc启用了GL_LESS(现实生活中的前景), 那么当前个物体挡住后个物体时, 由于前个物体深度值小(越靠近人的), 所以它就被画了出来, 后面的物体被挡住的像素就被忽略掉了。(当然你如果启用了GL_GREATER, 那么情况就反过来了)

这个时候再来说glClearDepth, 它给深度缓冲指定了一个初始值,缓冲中的每个像素的深度值都是这个, 比如1,这个时候你往里面画一个物体, 由于物体的每个像素的深度值都小于等于1, 所以整个物体都被显示了出来。 如果初始值指定为0, 物体的每个像素的深度值都大于等于0, 所以整个物体都不可见。 如果初始值指定为0.5, 那么物体就只有深度小于0.5的那部分才是可见的

转载于:https://my.oschina.net/xushizhe/blog/318924

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值