opengl 入门学习 随笔十一

本文介绍了计算机图形显示中的双缓冲技术原理及其应用,解释了如何通过双缓冲避免图像显示过程中出现的撕裂现象,并提供了计算帧率的方法。

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值