动画

视图用如下程序来实现计算机动画 播放数以万帧的影片

open_window();

for(i = 0;i < 1000000;i++)

{

clear_the_window();

draw_frame(i);

wait_until_a_24_of_a_second_is_over();

}

如果加上系统清除屏幕以及绘制一个典型的帧所需要的时间,这个程序产生的效果会越来越差!

假如绘制的物体在1/24秒的时间内是可见的,并且在屏幕上显示一副实体图像,但是越到后面,正在绘制的物体会以越来越快的速度清除,因为程序要接着显示下一帧,这就导致一个可怕的场景:观众看到的不是最终绘制完成的物体,而是清除的背景  并且带有严重的闪烁


采用双缓冲技术,即提供两个完整的颜色缓冲区,当一个缓冲区显示时,另一个缓冲区正在进行绘图,当一个帧绘制完成后,两个缓冲区就进行交换,那么原来用来显示的缓冲区就用来绘图,刚才用来绘图的缓冲区就进行显示

使用双缓冲区,每一帧只有在绘制完成后才会显示,观众永远不会看到不完整的帧。

示例:

open_window_in_double_buffer_moder();

for(i = 0;i < 1000000;i++)

{

clear_the_window();

draw_frame(i);

swap_the_buffers();

}


总结:

单缓冲,实际上就是将所有的绘图指令在窗口上执行,就是直接在窗口上绘图,这样的绘图效率是比较慢的,如果使用单缓冲,而电脑比较慢,屏幕会闪烁。
双缓冲,实际上的绘图指令是在一个缓冲区完成,这里的绘图非常的快,在绘图指令完成之后,再通过交换指令把完成的图形立即显示在屏幕上,这就避免了出现绘图的不完整,同时效率很高。
一般用OpenGL绘图都是用双缓冲,单缓冲一般只用于显示单独的一副非动态的图像


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值