admin 管理员组

文章数量: 1087139


2024年3月10日发(作者:paddington bear face)

S0FrWARE DEVEL0PMENT AND DESIGN 软件开发与设计 

C语言如何实现动画技术 

尉士华 

(贵州轻工职业技术学院,贵阳550005) 

摘要:介绍计算机动画的原理、应用及用C语言函数来实现动画的几种方法,同时举例说明利用画面存储再重放 

的方法实现动画技术,以及用C函数实现动画技术的各自特点。具体的应用中应该针对图形的复杂程度、动画效果 

的要求、软硬件环境的制约条件来选择适合的技术。 

关键词:视觉暂留;页交替;库函数;重放 

C language How to Achieve Animation Techniques 

WEI Shi-hua 

(Guizhou Light Industry Technical College,Guiyang 550005,China) 

Abstract:The passage introduces the principle and application of computer animation,using C language function to achieve 

animation methods,at the same time,it give an example to illustrate the use of image storage and playback method,How to 

achieve animation techniques and the use of C function to achieve animation technology characteristics.In our specific 

application computer should In the light of the picture S Complexity,animation S effects requirements,hardware and software 

environment restrict condition,To choose suitable technology to achieve their purpose. 

Key words:persistence of vision;Page turn;Database function;Replay 

动画是通过一定速度播放连续画面来显示运动和变化的 

过程,其含义有:播放速度(24f/s、25f/s、30f/s)、运动过程 

(动画的本质)、变化过程(色彩变化、光强变化)。计算机动 

画是借助计算机生成一系列动态播放的计算机技术。动画技 

较有效的。而当需要显示比较复杂的图形时,由于画擦图形 

时间相对较长,致使画面在移动时出现局部闪烁现象,使得 

动画视觉效果变差。所以,为提高图形的动态显示效果,在 

显示比较复杂的图形时多采用覆盖刷新的方法。总结起来, 

实现动画可用如下方法。 

2.1利用动态开辟图形窗口 

术是计算机图形学中的一个内容,它可用于影视广告、多媒 

体教学、Web动画技术、娱乐、模拟与仿真、科学计算与工 

程设计。可以利用图形应用软件制作动画(如Flash、3D 

max)。Turbo C提供的一些图形处理函数也可用于动画设计。 

可以利用图形窗口设置技术,实现图形窗口的动画效果, 

例如可在不同图形窗口中设置同样的图像,而让图形窗口沿x 

轴方向移动设置,这次出现前清除上次图形窗口的内容,这 

1 动画原理 

动画的实现主要依赖于人的视觉暂留。人眼在观察景物 

样就会出现图像沿x轴移动的效果。也就是说,在位置动态 

变化,但大小不变的图形窗口中(用setviewpot 0函数),设 

置固定图形(也可是微小变化的图像),由于总有 

时,光信号传人大脑神经,需经过一段短暂的时间,光的作 

用结束后,视觉形象并不立即消失,景物在眼睛里还将持续 

保留一会儿(24毫秒左右),大脑的感觉就好像这幅画依然存 

在似的。这种残留的视觉称“后像”,视觉的这一现象则被称 

clearviewport函数清除上次窗口的内容,这样呈现在观察者面 

前的是当前图形窗口位置在动态变化,因而在屏幕上看到的 

图像就好像在动态变化一样。注意:采用这种方法较复杂图 

形不宜,因为在图形窗口内画这种图形要占较长时间,这样 

图形窗口位置切换时间就变得较长,因而动画效果变差。 

2.2利用页交替 

为“视觉暂留”。故当两张图片显示的时间间隔小于24毫秒 

时,人不会感觉画面是断续的,从而产生动画的效果。它是 

多种视觉媒体形成和传播的根据。 

可以利用C语言提供的许多关于图形的函数来方便地实 

现动画,显然从前面地动画原理知道有两个关键的地方:第 

利用图形屏幕操作函数setactivepage()函数和 

setvisualpage 0函数也可以实现一些动画的效果。例如,将当 

就是图形图像的产生方式,要求产生的图形要准确。第二 

就是两副图之间的转换,要求转换速度要快,不能产生闪烁 

感。只有这样实现的动画才真实。 

前显示页和编辑页分开(用setvisualpage()函数和 

setactivepage 0函数),在编辑页上画好图形后,立即令该页 

变为显示页显示,然后在上次的显示页上(现在变为编辑页) 

进行画图,画好后,又再次交换,如此编辑页和显示页反复 

2 动画的实现方法 

计算机图形动画显示的是由一系列静止图像在不同位置 

上的重现。计算机图形动画技术一般分为画擦法和覆盖刷新 

法两大类。画擦法是先画T时刻的图形,然后在T+△T时刻 

把它擦掉,改画新时刻的图形是由点、线、圆等基本图元组 

成。这种一画一擦的方法对于实现简单图形的动态显示是比 

作者简介: 

尉士华(1976一),女,中级讲师,研究方向:计 

算机应用。 

2012-06—16 

收稿日期: 

娥 丞 

电脑编程技巧与维护 

地交换,在观察者的视觉上,就出现了动画的效果。此种方 

半, 

式南于使用硬件分页,实现前台显示后台作图的目的,换页 

速度快,因此动画效果极佳。 

buffer-=malloc(size);厂水为其分存储区 / 

getimage(69,169,131,231,buffer);,丰保存网球图 / 

putimage(500,169,buffer,COPY—PUT);,丰在另一区域重 

新显示 / 

do ffor(i_0;i<l85;i++) 

利用C语言图形库中的函数,绘图过程在屏幕上看不到, 

唯一的办法是缩短在页上的画图时间(即采用优化的画法), 

可以通过调用setvisualpage(int page)函数使得page成为可见 

图形页。但是这种方式同样有它的弊端:其只用于几种图形 

适配器。如VGA有两个屏幕页,EGA有4个屏幕页,而在其 

他的图形模式下则不能使用了。南于现代计算机图形显示的 

{putimage(70+1,170,buffer,COPY—PUT);,水左边球向 

左运动女/ 

pufimage(500-I,170,buffer,COPY-PUT);/ 右边球向 

右运动 / 

} 

高分辨和多色彩的发展,使得图形缓冲区的需求量呈几何数 

增长,所以在一般计算机技术中,很难实现,代价较高。而 

且两样动画的速度受到图形复杂的限制。 

2.3直接对图像动态存储进行操作 

利用显示适配器上控制图像显示的各个寄存器和图像存 

储器VRAM,对其进行直接操作和控制,从而可以高效快速 

地实现动画效果。这可以用汇编语言,直接进行BIOS调用来 

实现 

2.4利用画面存储再重放 

同制作幻灯片一样,将整个动画过程变成一个个片段, 

然后存到显示缓冲区内,当把它们按顺序重放到屏幕上时, 

就出现了动画效果,这可以用getimage函数和putimageg函数 

来实现,这种方法较前两种方法都快,因它已事先将要重放 

的画面面好后,余下的问题,就是计算应在什么位置重放的 

问题了。 

以下程序中演示了利用这种方法产生的动画效果,程序 

将用circle函数画出圆并用洋红色填充圆的图形用getimage函 

数存到内存buffer中,然后再用putimage函数将该圆放到屏 

幕的原来圆的相对位置,接着do循环不断地用putimage函数 

复制两个小圆(注意!每复制一次,由于存在的图像面积覆 

盖了原来的圆,故显示一个面),其方向是左边圆沿X轴正向 

复制,右边圆沿x轴负向复制,由于复制速度较快,因而动 

态地看到小球相向运行,直至碰撞(即两个小球圆心相距60 

时,或说i_184时),接着f0r循环又不断复制小球碰撞、弹 

回、又碰撞,……,当按任一键时,此过程结束。 

程序如下: 

#include<graphics_h> 

main 0 

{ 

int i,j,graphdriver,graphmode,size; 

void*buffer; 

graphdriver=DETECT; 

initgraph(&graphdriver,&graphmode,”c:、\£c、、bgi); 

setbkcolor(BLUE); 

cleardevice(); 

setcolor(YELLOW); 

setlinestyle(0,0,1); 用细实线 / 

setfillstyle(1,5); 用洋红实线填充 , 

circle(1oo,200,30); 

floodfill(1oo,200,YELLOW);,木填充圆 / 

size=imagesize(69,169,131,231); 指定图像占字节数 

・ 电■■翟技巧与雄 -l{  

ofr(i=0;i<l85;i++) 

{putimage(255-i,170,buffer,COPY—PUT);,术左边球向 

左运动 , 

Putimage(315+i,170,buffer,COPY—PUT);,木右边球向右 

运动 / 

l}while(!kbhit()); 当不按键时重复上述过程 / 

Getch 0; 

Closegraph 0;} 

程序执行后,屏幕背景色为蓝色,接着清屏,以黄色细 

实线画一圆,并用洋红色实填该圆,接着再另一区域重新显 

示圆球图像。接着左右两球同时向中间运动的动画图像,再 

接着形成中间两球向左右两边运动的图像,如果没有键被按 

下,则继续下一轮循环重复运动。 

3 结语 

利用C语言实现动画的方法还有利用掩膜技术实现动画 

(它是对getmage和putimage函数的深层应用)、利用移动背景 

法产生动画(有些动画内容只移动目标是不能产生很好的动 

画效果的,如汽车的长时间行驶、飞机的航行等,由于受到 

屏幕所限,只能是稍纵即逝。但可以用背景移动法来实现动 

画,基本思想是目标不动,通过移动背景,使视觉产生相对 

运动,从而形成动画,移动背景要采用以上几种方法)等, 

在具体的应用中应该针对图形的复杂程度、动画效果的要求、 

软硬件环境的制约条件来选择适合的技术以实现自己目的。 

参考文献 

[1】王士元.C语言高级程序设计【M】.清华大学出版社, 

1995. 

【2】唐泽审,董士海,李华,等,译.计算机图形学原理及实 

践C语言描述【M】.机械工业出版社,2004. 

【3]朱蓉,郑建华.C语言实现动画技术的探讨.电脑知识与 

技术,2005. 


本文标签: 动画 图形 实现 利用 技术