您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > C语言动画技术的实现方法
C语言动画技术的实现方法在利用C语言进行工程开发、游戏设计以及计算机辅助教学软件研制中,都要采用动画技术。动画具有突出并强化事物特征、实现工作模拟、进行图形变换等多种功能,使所开发的软件科学合理、生动形象。我们在多年计算机辅助教学软件的开发研制实践中,探索出C语言动画技术的几种实现方法,现介绍如下:一、利用目标移动技术实现画动画的形式是多种多样的,目标移动是其中之一,即将被移动的目标由屏幕的一个位置移动到另一个位置。如果直接一步到位移动,没有中间过程,会使人有生硬或突然感,动感不强,为了实现良好的动感,必须根据目标的大小及移动距离的长短分成若干步来实现,每动一步先用底色覆盖原来的目标,再将移动目标复现在政一位置,这样依次到目的地,由于人眼具有视觉暂留的生理现象,人的肉眼见此移动过程具有真实感。很多资料中又将这种动画设计方法叫做中间化。用此法还可以进行平移、变形、旋转等动画设计。如16火箭腾空.C程序中利用目标移动覆盖的方法在屏幕上左右往返移动一个圆和一个长形的子程序。二、利用存取位图像函数产生动画上一种方法每移动一步都要在中间点上重新绘制移动目标,移动目标小,且绘制简单的内容较容易实现,而当被移动目标大且绘制较复杂时,采用这样的方法就不理想,C语言图形库中有将指定区域的一个位图像存到主存储区中的函数getimage()和在屏幕指定位置上显示一个图像分配图像函数putimage()。首先通过imagesize(x1,y1,x2,y2)函数为存储图像分配存储空间,(x1,y1),(x2,y2)分别为图像的左上角和右下角的坐标,然后调用malloc[imagesize(x1,y1,x2,y2)]得到新分配块的指针,如果没有足够的空间分配给新块就返回NUL,最后用getimage(x1,y1,x2,y2,viodfar*buffer)将屏幕矩形区域内容保存到主存储区,前四个参数为图像左上、右下角坐标,buffer为指向主存储区中存放位图像区域的指针,至此,移动目标存储完毕。调用putimage(x1,y1,voidfar*buffer,ops)将以前用getimage保存的图像重新送回屏幕,图像的左上角坐标为(X1,Y2),buffer为指向保存源图像的主存储区域的指针。参数ops指明了一个组合算子,它用于颜色,该颜色是由显示区域已在屏幕的和保存源图像的像素来计算的。其取值有拷贝(COPY-PUT)、异或(XOR-PUT)、或(AND-PUT)和拷贝源图像的非(NOT-PUT)等几种,取COPY-PUT时,将源位图像拷贝到屏幕上,取XOR-PUT时,将源位图像同显示区域已在屏幕上的图像“异或”等等。巧妙使用这两个函数,可以产生多种动画形式,在Feiji.c程序中,就是应用此法。三、利用活动动页产生动画一些计算机的图形硬件提供了两个以上独立的存储区或存储页,用户可以在这些区或页中进行绘图、显示,这种方法只适用于几种图形适配器,如VGA有两个屏幕页,EGA有四个屏幕页。利用这种方法产生动画的基本思想是将各页预先绘好显示内容,然后在它们之间互相切换,或屏幕页的交替显示,便可产生动画。在C语言图形库中有一函数setactivepage(intpage),通过对该函数的调用可以使用page成为活动页,该句后面的所有图形输出都针对page图形页,此时在本页各种图形绘制的过程在屏幕上看不到,当调用setvisualpage(intpage)时,就使得page成为可见图形页。有了多个图形页,程序就可以将图形输出到一个关闭的屏幕页,可以理解为先在屏幕的后台工作,然后,通过调用setvisualpage改变可见页来快速显示后台屏幕图像,从而产生动画。如可见页动画.txt。四、利用调色板产生动画以上所介绍的移动、复制、交替出现的动画生成方法,都是使目标运动。有时可以利用调色板改变颜色产生动画。设计基本思想有二:一是各目标按所设计的颜色用调色板变色产生闪动感,如星空、灯光等;二是用不同的颜色(有一定的规律)在屏幕的一系列位置上绘制出目标,当改变调色板中的颜色时,所有的目标都将改变颜色,颜色的有序变化,就可以产生动画,如高山流水,便可用此法实现。C语言图形库中有关调色板的函数有:getpalette(structpalettetypefar*palette)函数,它将有关当前调色板尺寸和颜色信息填入到由palette所指的palettetype的结构中;setallpalette(structpalettetypefar*palette)函数把当前调色板置为由palette所指的palettetype结构中给出的值;setpalette(intinco,intblco)函数将调色板中的入口颜色inco改变为颜色blco。如:setpalette(0,4)便将当前调色板中的第一种颜色(即背景颜色)改变为实际颜色数4,屏幕上的其它颜色也随之改变。五、利用掩模技术产生动画所谓掩模,就是对于被移动的目标,使用两个稍有不同的图像,这两个特殊的图模互相混合,从而使移动的目标在经过背景时,不改变颜色,它是对getmage和putimage函数的深层应用。实现的方法是,对移动的目标事先做好AND图和XOR图,这两上特殊的图制作方法是不同的,AND图要求目标轮廓内容点的像素值为0,而XOR图则按实际颜色去制,并将这两个图用getimage保存于存储区中,当移动该目标时,先将要移动位置的屏幕保存,然后第一个模与屏幕相“与”,第二个模与第一个模相“异或”,最后,复制回保存的屏幕,两个模组合后目标将以正常的颜色出现在屏幕上,并且背景也保持不变。子程序move-5就是应用此法简单模拟地球围绕太阳转的实例。用此技术还可以使多个目标在屏幕上同时运动,如太阳系的九大行星的公转等。六、利用移动背景法产生动画有些动画内容只移动目标是不能产生很好的动画效果的,如汽车的长时间行驶、飞机的航行等,由于受到屏幕所限,只能是稍纵即逝。但可以用背景移动法来实现动画,基本思想是目标不动,通过移动背景,使视觉产生相对运动,从而形成动画,移动背景要采用以上几种方法。限于片幅,不再举例。动画实现的方法是多种多样的,只要我们在实际应用中,科学设计,灵活应用,定会使您的动画达到理想的效果。Tc2.0中怎么样设置图形显示?Tc2.0中有两种显示模式,一种是我们所熟知的字符模式,另一种是图形模式。在字符模式下只能显式字符,如ASCII字符。一般是显示25行,每行80个字符。程序缺省的是字符模式。在字符模式下不能显式图形和进行绘图操作。要想进行图形显示和绘图操作,必须切换到图形模式下。Tc2.0中用initgraph()函数可以切换到图形模式,用closegraph()可以从图形模式切换回字符模式。initgraph()和closegraph()都是图形函数,使用图形函数必须包括头文件graphics.h。voidfarinitgraph(intfar*graphdriver,intfar*graphmode,charfar*pathtodriver);graphdriver是指向图形驱动序号变量的指针;graphmode是在graphdriver选定后,指向图形显示模式序号变量的指针。pathtodriver表示存放图形驱动文件的路径。Tc2.0中有多种图形驱动,每种图形驱动下又有几种图形显示模式。在程序中图形驱动序号为VGA,图形显示模式序号为VGAHI。这是一种分辨率为640*480(从左到右坐标依次为0-639,从上到下坐标依次为0-479),能够显示16种颜色的图形模式。别的图形驱动序号和图形显示模式序号,可以从手册或联机帮助中找到。pathtodriver指示存放图形驱动文件的路径。图形驱动序号不同,图形驱动文件也不同。序号为VGA图形驱动对应egavga.bgi这个图形驱动文件。egavga.bgi一般在Tc目录下。voidfarclosegraph(void);没有参数,从图形模式直接返回字符模式。initgraph()和closegraph()的常用用法如下:intgdriver=VGA,gmode=VGAHI,errorcode;/*initializegraphicsmode*/initgraph(&gdriver,&gmode,e:\\tc2);/*readresultofinitialization*/errorcode=graphresult();if(errorcode!=grOk)/*anerroroccurred*/{printf(Graphicserror:%s\n,grapherrormsg(errorcode));printf(Pressanykeytohalt:);getch();exit(1);/*returnwitherrorcode*/}/*returntotextmode*/closegraph();
本文标题:C语言动画技术的实现方法
链接地址:https://www.777doc.com/doc-2908832 .html