实时动画

更新时间:2023-10-27 11:14

实时动画也称为算法动画,它是采用各种算法来实现运动物体的运动控制,在实时动画中,计算机一边计算一边显示就能产生动画效果。实时动画一般不包含大量的动画数据,而是对有限的数据进行快速处理,并将结果随时显示出来。实时动画的响应时间与许多因素有关,如计算机的运算速度、软硬件处理能力、景物的复杂程度、画面的大小等。游戏软件以实时动画居多。

定义

实时动画也称为算法动画,它是采用各种算法来实现运动物体的运动控制。在实时动画中,计算机一边计算一边显示就能产生动画效果。实时动画一般不包含大量的动画数据,而是对有限的数据进行快速处理,并将结果随时显示出来。实时动画的响应时间与许多因素有关,如计算机的运算速度、软硬件处理能力、景物的复杂程度、画面的大小等。游戏软件以实时动画居多。

在实时动画中,一种最简单的运动形式是对象的移动,它是指屏幕上一个局部图像或对象在二维平面上沿着某一固定轨迹运动。运动的对象或物体本身在运动时的大小、形状、色彩等效果是不变的。具有对象移动功能的软件有许多,如AuthorwareFlash等都具有这种功能,这种功能也被称作多种数据媒体的综合显示。对于对象的移动相对简单,容易实现,又无需生成动画文件,所以应用广泛。但是,对于复杂的动画效果,则需要使用二维帧动画预先将数据处理和保存好,然后通过播放软件进行动画播放。

实时动画是最灵活的动画,但也是最慢的。由于在进行动画的同时绘制每一副图像,因此可以根据需要动态来改变下一副图像内容,也就是最具有交互性。实时动画的交互特性使之成为三维环境中移动模拟的有利候选者,随着模拟复杂性的增加,越来越多的代码必须转换成汇编语言以优化动画性能。但是C语言却能达到非常杰出的动画效果

原理

实时动画一般使用两个图形页,其中一个做显示页,另一个做作图页,用户只能看到显示页的图像。在作图页完成一幅图像后,把该页切换成显示页,把原显示页变成作图页,然后在新的作图页上绘制另一幅图像,画完后再与刚才的显示页切换,如此循环下去。真正的作图过程总是在作图页上,所以用户看到的总是上一次完成的图像。

显然,实时动画的速度取决于图像内容的复杂程度。对于一个复杂的物体,其动画速度会慢一些。使用C时,一般实时动画的速度为每秒两帧或更慢。

设定作图页的函数:

QuickC:_setactivepage(pagenum);

TurboC:_setactivepage(pagenum);

设定显示页的函数:

QuickC:_setvisualpage(pagenum);

TurboC:_setvisualpage(pagenum);

交替使用这两组函数来切换作图和显示页,就可以产生实时动画。

分类

实时动画是采用算法实现对物体的运动控制或模拟摄像机的运动控制,一般适合于三维情形,根据不同的算法可分为以下几种:

运动学算法

运动学方程确定物体的运动轨迹和速率。

动力学算法

从运动的动因出发,由力学方程以确定运动形式。

反向运动学算法

已知链接物末端的位置和状态,反求运动方程以确定运动形式。

反向动力学算法

已知链接物末端的位置和状态,反求动力学方程以确定运动形式。

随机运动算法

在某些场合下加进运动控制的随机因素。

改善技巧

尽管实时动画永远不会达到帧动画那样的速度,但良好的交互性使得它成为动画设计的最佳选择。在动画的同时生成每一副图像,可以很容易地使用键盘来改变进行动画的模型的形状、位置和其他特征。改善实时动画效果的四种技巧如下:

越简单越好

尽量使图像简单。计算机生成图像的时间越长,动画的速度就越慢。在实时动画中,模型的动作决定了图形的可信程度,也就是说,绘制模型的细节并不太重要。重要的是动作。如果你注重图形的细节,那么最好使用帧动画或BITBLIT动画。

使用背景缓冲区

如果需要复杂的背景,比如远处的群山或城堡,你可以使用另一个隐藏页,不妨称之为背景缓冲区,把背景画好后存贮在该页中。动画序列的每一帧图像用下面的方法产生:先把背景缓冲区的内容拷贝到作图页中;然后在作图页上绘制图像;最后切换显示页和作图页,这样含有背景的图像就被显示到屏幕上了。

优化三维公式

正弦余弦的计算是很费时间的。如果一个三维模型仅仅是在屏幕上来回移动(不旋转),则可修改原来的三维公式,计算出一个模型的各种角度的正弦和余弦值后,仅仅调用下面的位移公式来实现模型的移动:

没有必要每次都重新计算控制旋转的变量srl、crl等等。用上面的平移公式,一个模型可以迅速地前后左右移动。

使用线性模型

使用透明的线性模型可以大大提高动画的速度,因为对模型进行消隐的程序是十分费时的。

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}