视图用如下程序来实现计算机动画 播放数以万帧的影片
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绘图都是用双缓冲,单缓冲一般只用于显示单独的一副非动态的图像