其实动画就是将画面逐个的播放,原理非常简单,一旦一秒钟显示超过24幅画面,人眼就会错认为是连续的。
实际的动画是画好了,然后直接在显示出来就好;计算机是画一幅,拿出来一幅;再画一幅,再拿出来一幅。
有可能发生这样一种情况,计算机画图比较快,如果直接在显示器上画画,那么有可能有的图形画到一半让观众看到了,而后面虽然画全了,但是人眼没有反应过来,依然停留在那个残缺的画面。解决这个问题就是双缓冲技术。即,一个用于画画,一个用于显示。将两个缓冲交换,在空闲的缓冲区中作画。交换两个缓冲只需交换两个指针,所以效率非常高。
接下来的思路就是,计算机在什么时间作画,意思就是cpu同时运行了多个程序,那么只可能在空闲的时候画画。
glInitDisplayMode(GLUT_RGB|GLUT_DOUBLE);
glutIdleFunc(&myIdle);
void myDisplay()
{
......
glFlush();
glSwapBuffers();//启用双缓冲要记得交换缓冲
}
第一句中的GLUT_DOUBLE表示双缓冲,GLUT_SINGAL表示单缓冲。
第二句就表示在空闲的时候画画,其中myIdle函数中包含myDisplay函数。
其次介绍帧率的概念:一秒钟显示多少幅画面;思路:我们求出50幅画面一共用了多少时间,
这样能算出相邻两幅画面的时间,这就是频率,因此可以算出帧率。
double CalFrequency()
{
static int count;
static double save;
static clock_t last,current;
double timgap;
++count;
if(count<=50)
return save;
count =0;
last = current;
current = clock();
timegap = (current - last)/(double)CLK_TCK;
save = 50.0/timegap;
return save;
}这就是计算帧率的函数,其实就是获得两个时间,一个是执行前的,和执行到50帧画面时的。
本文介绍了计算机图形显示中的双缓冲技术原理及其应用,解释了如何通过双缓冲避免图像显示过程中出现的撕裂现象,并提供了计算帧率的方法。
5141

被折叠的 条评论
为什么被折叠?



