OpenGL学习笔记:动画基本概念

来源:互联网 发布:网络机房装修招聘 编辑:程序博客网 时间:2024/04/30 20:07
帧速:
一秒钟展现的画面超过24幅,人眼就会以为是连续的。
平时观看的电视,一般是25到30幅之间。
对一个正常人来说,每秒60到120幅图画是最合适的,速度过快,人眼就反应不过来了。

一定要匀速的播放每个画面,比如,在第一个1/24秒播放第一张图片,一定要在第二个1/24秒播放第二张,太早太快都会导致动画效果时快时慢。
换而言之,整个动画的速度,往往取决于显示时间最慢的那个画面。

如果用C语言伪代码来描述这一过程,就是:
for(i=0; i<n; ++i) { DrawScene(i); Wait(); }
这个wait很重要,用于保证匀速。

计算帧数最简单的方法:统计两次画画的时间差就可以得到。

双缓冲:
计算机中,没有现成的图片可以播放,都是先画一张,播放一张。
双缓冲就是指先把图片在内存中画好,再直接显示到屏幕上。很自然的想法。如果不采用双缓冲,直接在屏幕上画,会导致只画了某幅图的一半的时候就被观众看到。而后面虽然他把画补全了,但观众的眼睛却又没有反应过来,还停留在原来那个残缺的画面上。也就是说,有时候观众看到完整的图象,有时却又只看到残缺的图象,这样就造成了屏幕的闪烁。

注意,双缓冲并不会提升速度,相反,多了个交换指针的动作,理论上讲还会降低速度,双缓冲只是保证了画面的完整性,不会出现残缺的图像。

绝大多数平台都支持双缓冲技术

垂直同步:
垂直同步是指,只有在显示器刷新的时候,才把绘制好的图片传输出去显示。
好处是,计算机就不必去绘制大量的根本就用不到的图象了。如果显示器的刷新率为85Hz,则计算机一秒钟只需要绘制85幅图象就足够。由于计算机的处理速度往往很快,如果不采用垂直同步,计算机会绘制很多无法显示的图片。还可能带来一些负面影响(例如,显示器只刷新到一半时,需要绘制的内容却变化了,由于显示器是逐行刷新的,于是显示器上半部分和下半部分实际上是来自两幅画面)

缺点是,容易造成跳帧。如果刷新频率为60Hz,则在绘制比较简单的场景时,绘制一幅图画需要的时间很段,帧速可以恒定在60FPS(即60帧/秒)。如果场景变得复杂,绘制一幅图画的时间超过了1/60秒,则帧速将急剧下降。如果绘制一幅图画的时间为1/50,则在第一个1/60秒时,显示器需要刷新了,但由于新的图画没有画好,所以只能显示原来的图画,等到下一个1/60秒时才显示新的图画。于是显示一幅图画实际上用了1/30秒,帧速为30FPS。(如果不采用垂直同步,则帧速应该是50FPS)如果绘制一幅图画的时间更长,则下降的趋势就是阶梯状的:60FPS,30FPS,20FPS,……(60/1,60/2,60/3,……)如果每一幅图画的复杂程度是不一致的,且绘制它们需要的时间都在1/60上下。则在1/60时间内画完时,帧速为60FPS,在1/60时间未完成时,帧速为30FPS,这就造成了帧速的跳动。这是很麻烦的事情,需要避免它——要么想办法简化每一画面的绘制时间,要么都延迟一小段时间,以作到统一。

几乎所有的显卡都支持“垂直同步”这一功能。垂直同步是系统性质,可以打开或关闭,默认自动同步。