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.
版权声明:本文标题:C语言如何实现动画技术 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1710029194a554376.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论