摘 要: 動畫具有突出并強(qiáng)化事物特征、實(shí)現(xiàn)工作模擬、進(jìn)行圖形變換等多種功能,使所開發(fā)的軟件科學(xué)合理、生動形象。本文介紹了動畫的基本原理及利用C語言程序設(shè)計(jì)實(shí)現(xiàn)動畫的常用方法。
關(guān)鍵詞: C語言 動畫技術(shù) 實(shí)現(xiàn)方法 圖形處理函數(shù)
C語言是一種計(jì)算機(jī)程序設(shè)計(jì)語言。它既具有高級語言的特點(diǎn),又具有匯編語言的特點(diǎn)。它可以作為工作系統(tǒng)設(shè)計(jì)語言,編寫系統(tǒng)應(yīng)用程序,也可以作為應(yīng)用程序設(shè)計(jì)語言,編寫不依賴計(jì)算機(jī)硬件的應(yīng)用程序。C語言具有強(qiáng)大的繪圖能力,可移植性好,并具備很強(qiáng)的數(shù)據(jù)處理能力,因此適于編寫系統(tǒng)軟件、二維、三維圖形和動畫。利用C語言提供的圖形處理函數(shù)設(shè)計(jì)動畫程序,可以用于游戲娛樂、輔助教學(xué)、實(shí)驗(yàn)?zāi)M和仿真等計(jì)算機(jī)輔助設(shè)計(jì),具有較強(qiáng)的實(shí)用性。下面介紹幾種C語言中圖形動畫技術(shù)的實(shí)現(xiàn)方法。
一、動畫實(shí)現(xiàn)的原理
動畫的制作原理類似于電影,它是利用了人的視覺效應(yīng),使一幅圖像在不同時間和位置多次出現(xiàn),從而產(chǎn)生動畫效果。動畫的實(shí)現(xiàn)其實(shí)主要依賴的是人的視覺殘留作用,人的視覺有一種惰性,當(dāng)看一幅畫的時候這幅畫的信息就保存在眼睛里了,即使這幅畫突然消失,保存在眼睛里的信息還將保留一會兒(大約十分之一秒)。大腦的感覺就好像這幅畫還存在似的。人不會感覺畫面是斷續(xù)的,從而產(chǎn)生動畫的效果。因此動畫就是由一連串許許多多的單幅圖像,在程序中快速反復(fù)地循環(huán)顯示而產(chǎn)生。因此我們可以用C語言提供的許多關(guān)于圖形的函數(shù)來方便地實(shí)現(xiàn)動畫,從前面的動畫原理可以知道有兩個關(guān)鍵的地方:一是圖形圖像的產(chǎn)生方式,要求產(chǎn)生的圖像要準(zhǔn)確。二是兩幅圖之間的轉(zhuǎn)換,要求轉(zhuǎn)換速度要快,不能產(chǎn)生閃爍感。只有這樣實(shí)現(xiàn)的動畫才逼真。
二、C語言動畫設(shè)計(jì)常用方法
1.利用目標(biāo)移動覆蓋技術(shù)實(shí)現(xiàn)動畫
動畫的形式是多種多樣的,目標(biāo)移動是其中之一,即將被移動的目標(biāo)由屏幕的一個位置移動到另一個位置,直接一步到位移動,沒有中間過程,會使人有生硬突然感,動感不強(qiáng)。為了實(shí)現(xiàn)良好的動感,必須根據(jù)目標(biāo)的大小及移動距離的長短分成若干步來實(shí)現(xiàn),每動一步先用底色覆蓋原來的目標(biāo),再將移動目標(biāo)復(fù)現(xiàn)在下一位置,這樣逐步到達(dá)目的地。由于視覺暫留這一人的生理現(xiàn)象,人的肉眼所見此移動過程具有真實(shí)感。很多資料中又將這種動畫實(shí)現(xiàn)方法叫做中間化。用此法還可以進(jìn)行平移、變形、旋轉(zhuǎn)等動畫設(shè)計(jì)。
2.利用擦除法實(shí)現(xiàn)動畫
擦除法動畫設(shè)計(jì)方法在很多的動畫制作工具中大量使用,它的設(shè)計(jì)原理是:利用同色原理,當(dāng)圖形色與背景色相同時人眼不能感知。在動畫設(shè)計(jì)中,當(dāng)一個位置畫了一張圖像并使圖像色與背景色也相異,此時將先前畫的圖像在原位置再畫一張,并使圖像色與背景色相同,這樣人眼只能看到新畫的一張圖像而看不到先前畫的圖像,從而先前畫的圖像被擦除了。這樣連續(xù)畫多張圖像并在每畫一張新的圖像,將原來的圖像擦除,在觀察者看來就實(shí)現(xiàn)了動畫的效果。擦除法動畫設(shè)計(jì)便于操作,并且它的程序運(yùn)行所需內(nèi)存空間小,程序執(zhí)行過程中不需要圖形存入內(nèi)存再從內(nèi)存調(diào)出,節(jié)省了大量內(nèi)存空間。
3.利用調(diào)色板實(shí)現(xiàn)動畫
調(diào)色板是存放當(dāng)前可用顏色的一張表,C語言定義了一個名為palette的預(yù)定義結(jié)構(gòu)來存放調(diào)色板信息。該數(shù)據(jù)類型定義為:
# define MAXCOLCRS 15
Struct palettetype
{
Unsigned char size;
Unsigned char color
}
利用getpalette( )函數(shù)可以獲取當(dāng)前調(diào)色板的信息,其方法為;
Struct palettetype pa;
getpalette(&pa);
以上語句執(zhí)行后,當(dāng)前調(diào)色板信息就存放于結(jié)構(gòu)pa中了。
用調(diào)色板產(chǎn)生動畫的基本思想是使用不同的顏色在屏幕上繪制圖形。然后改變調(diào)色板中的顏色,這時圖形中的所有對象立即改變顏色,就好像它們在新位置上重新繪制一樣。這樣將顏色變化序列化,即可制造出動畫效果來。由于是通過改變調(diào)色板實(shí)現(xiàn)動畫的,不需要重新繪制每一幅畫面,因而顯示速度非常快,并能產(chǎn)生獨(dú)特的動畫效果。由此可見,調(diào)色板動畫必須靠改變調(diào)色板中的顏色來實(shí)現(xiàn)。這在Turbo C有可以通過setpalette( ),setrgbpalette( )和setall palette( )這三個函數(shù)來實(shí)現(xiàn)。
三、基于TC環(huán)境中的graphics.h
Turbo C提供了非常豐富的圖形函數(shù),所有圖形函數(shù)的原型均在graphics. h中,使用圖形函數(shù)時要確保有顯示器圖形驅(qū)動程序*BGI,同時將集成開發(fā)環(huán)境Options/Linker中的Graphicslib選為on,只有這樣才能保證正確使用圖形函數(shù)。圖形模式的初始化不同的顯示器適配器有不同的圖形分辨率。即使是同一顯示器適配器,在不同模式下也有不同分辨率。因此,在屏幕作圖之前,必須根據(jù)顯示器適配器種類將顯示器設(shè)置成為某種圖形模式,在未設(shè)置圖形模式之前,微機(jī)系統(tǒng)默認(rèn)屏幕為文本模式(80列,25行字符模式),此時所有圖形函數(shù)均不能工作。設(shè)置屏幕為圖形模式,可用圖形初始化函數(shù):
void far initgraph(int far *gdriver,int far *gmode,char *path);
其中g(shù)driver和gmode分別表示圖形驅(qū)動器和模式,path是指圖形驅(qū)動程序所在的目錄路徑。
本文介紹了在Turbo C中實(shí)現(xiàn)動畫的幾種常用的方法。但是各種動畫技術(shù)都有其自身的優(yōu)點(diǎn)和缺點(diǎn),在實(shí)際的設(shè)計(jì)過程中,我們還要加以認(rèn)真分析,科學(xué)設(shè)計(jì),靈活應(yīng)用。只有通過完整和精密的策劃,才能使設(shè)計(jì)的動畫達(dá)到理想的效果。
參考文獻(xiàn):
?。?]譚浩強(qiáng).C語言程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2003.
?。?]徐金桐.Turbo C實(shí)用大全[M]. 北京:機(jī)械工業(yè)出版社出版,1999.
?。?]焦華.標(biāo)準(zhǔn)C技能百練[M].北京:中國鐵道出版社,2004.
?。?]孫家廣.計(jì)算機(jī)圖形學(xué)(第三版)[M].北京:清華大學(xué)出版社,2004.