OpenGL帧缓存(转)

作为最后一关,我们将架设自己即时光影的动画,让没有VOODOO的玩家看看OPENGL 这震撼(至少我是这么认为的吧)的效果。

我们前面(好象是第三还是第四次)讲过如何用几何变换实现动画。那时的效果现在看肯定不尽人意,因为频繁的闪烁不是我们需要的。因为那时(到这之前也是)采用的是单缓存模式。对正在显示的部分边计算边修改必然造成速度瓶颈,出现闪烁。一般正规的动画制作在实现上都是通过双缓存实现的(硬件也好,软件也好)大家可以参考《家用电脑与游戏机》的98-2中的一篇文章。当前台显示缓存用于显示时,后台缓存已经进行计算,计算完毕把所有内容通过缓存拷贝一次性完成,防止闪烁的出现。

一 OPENGL帧缓存的实现

1 颜色缓存(Color Buffer)其中内容可以是颜色索引或者RGBA数据,如果用的OPENGL系统支持立体图,则有左右两个缓存。

2 深度缓存(Depth Buffer) 就是Z-BUFFER,用于保存象素Z方向的数值,深度大的被深度小的代替,用以实现消隐

3 模板缓存(Stencil Buffer) 用以保持屏幕上某些位置图形不变,而其他部分重绘。例如大家熟悉的开飞机和赛车的游戏的驾驶舱视角,只有挡风外面的景物变化,舱内仪表等等并不变化。

4 累计缓存(Accumulation Buffer) 只保存RGBA数据,用于合成图象,例如有某缓存中的位图调入这里合成一幅新图。

二 帧缓存的清除
对高分辨率模式清除缓存是工作量巨大的任务,OPENGL一般先寻求硬件同时完成,否则软件依次解决。我们前面每次必用的glClearColor()大家已经不陌生吧。

首先设置清除值
void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf
alpha);
void glClearIndex(GLfloat index);
void glClearDepth(GLclampd depth);
void glClearStencil(GLint s);
void glClerAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha);

然后进行清除
void glClear(GLbitfield mask);
mask: GL_COLOR_BUFFER_BIT|
GL_DEPTH_BUFFER_BIT|

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值