opengl 入门学习 随笔十一

来源:互联网 发布:怎么设计一个软件 编辑:程序博客网 时间:2024/05/18 09:17

其实动画就是将画面逐个的播放,原理非常简单,一旦一秒钟显示超过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帧画面时的。


0 0