張亦楠
摘 要:研究現(xiàn)有的多種動(dòng)態(tài)圖像設(shè)計(jì)方法,分析其優(yōu)缺點(diǎn)及適用性。將各種動(dòng)態(tài)圖像設(shè)計(jì)方法匯總,根據(jù)采用設(shè)計(jì)語(yǔ)言及不同設(shè)計(jì)方法進(jìn)行分類,詳盡闡述各種設(shè)計(jì)方法的原理,說(shuō)明其使用模式。通過(guò)執(zhí)行速度及程序復(fù)雜性等分析各種方法的優(yōu)缺點(diǎn)及適用性。為各種操作系統(tǒng)(包括嵌入式系統(tǒng))的開發(fā)者進(jìn)行動(dòng)態(tài)圖像設(shè)計(jì)拓寬了視野,并給出了方法選擇建議。
關(guān)鍵詞:動(dòng)態(tài)圖像;高速平滑;第三方軟件;翻頁(yè)
中圖分類號(hào):TP391文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1004-373X(2009)12-073-05
Comparative Analysis on Varieties of Methods for Designing Animated-images
ZHANG Yinan
(Navy Submarine Academy,Qingdao,266071,China)
Abstract:Varieties of current methods for designing animated images are researched,and their superiorities and disadvantages are analysed.Varieties of current methods for designing animated images are enumerated,which are categorized basing on different designing languages and means,principles and using-modes.The superiorities and disadvantages of varieties of methods by comparing performing velocities and program complexities are analysed.It exploits visual field and provides suggestions of method-choices for kinds of OSs(including embedded systems) developer.
Keywords:animated-images;high-speed smoothness;third-party software;flip
0 引 言
動(dòng)態(tài)圖像技術(shù)是計(jì)算機(jī)圖形學(xué)中的重要內(nèi)容,它廣泛用于游戲娛樂(lè)、輔助教學(xué)、科學(xué)實(shí)驗(yàn)?zāi)M等計(jì)算機(jī)輔助設(shè)計(jì)。在程序設(shè)計(jì)中,動(dòng)態(tài)圖像的設(shè)計(jì)是程序員經(jīng)常遇到的問(wèn)題,其設(shè)計(jì)語(yǔ)言和方法多種多樣。根據(jù)是否需要借助于其他應(yīng)用軟件和程序,可以將這些方法分成兩大類。第一類是只使用各種編程語(yǔ)言及開發(fā)環(huán)境中包含的文件和框架實(shí)現(xiàn)的設(shè)計(jì)方法;第二類是安裝相關(guān)軟件(諸如Flash,DirectDraw等),在相關(guān)語(yǔ)言的開發(fā)環(huán)境中將這些軟件的功能文件包含進(jìn)去,共同實(shí)現(xiàn)動(dòng)態(tài)圖像設(shè)計(jì)的方法。
然而,有關(guān)動(dòng)態(tài)圖像的設(shè)計(jì),現(xiàn)有的教程資料中大都“各顧眼前人”,其方法分散(見于各種開發(fā)語(yǔ)言的編程指南中),很少將各種動(dòng)態(tài)圖像的設(shè)計(jì)方法匯總成資料。本文正是做了這方面工作,希望幫助動(dòng)態(tài)圖像設(shè)計(jì)的開發(fā)人員對(duì)動(dòng)態(tài)圖像設(shè)計(jì)有一個(gè)清晰、宏觀的認(rèn)識(shí),拓寬視野,在選取設(shè)計(jì)方法時(shí),能夠辨明利弊,靈活使用。這樣,使用者也可以看到更加賞心悅目的界面。
1 動(dòng)態(tài)圖像設(shè)計(jì)的原理
程序設(shè)計(jì)中動(dòng)態(tài)圖像設(shè)計(jì)的原理類似于電影中普通的動(dòng)畫原理,都是利用人的視覺(jué)具有“暫留”的生理特點(diǎn)(即人眼對(duì)動(dòng)態(tài)圖像的變化僅能分辨出時(shí)間間隔為25 ms左右的變化,如果圖像變化太快,則人眼無(wú)法分辨),使連續(xù)的靜止畫面看上去具有動(dòng)感。在程序設(shè)計(jì)中可以在屏幕上畫出一張圖像,而這張圖像將在不同時(shí)間出現(xiàn),然后一張張快速(時(shí)間間隔小于25 ms)呈現(xiàn)在屏幕上,從視覺(jué)效果上看這些畫面就如同電影在連續(xù)變化一樣,給人以動(dòng)的視覺(jué)感覺(jué)。
2 不需安裝第三方軟件的動(dòng)態(tài)圖像設(shè)計(jì)方法
2.1 最簡(jiǎn)單的Logo程序語(yǔ)言設(shè)計(jì)方法
Logo是一種解釋型語(yǔ)言,與其他的語(yǔ)言不同,它內(nèi)置了一套Turtle Graphics系統(tǒng),令程序設(shè)計(jì)更加形象化,也更易于理解,使得用戶可以通過(guò)簡(jiǎn)單的編程創(chuàng)作出豐富多彩的視覺(jué)效果或圖案。
Logo程序語(yǔ)言中,常用的圖像動(dòng)態(tài)效果可以歸納為閃爍、旋轉(zhuǎn)和移動(dòng)三種。
2.1.1 使圖像閃爍的編程技巧
使圖像閃爍的編程技巧如圖1所示。
圖1 使圖像閃爍的編程技巧
2.1.2 使圖像旋轉(zhuǎn)的編程技巧
下面給出畫一個(gè)金光四射太陽(yáng)的程序?qū)嵗?如圖2所示。
圖2 畫一個(gè)金光四射的太陽(yáng)的過(guò)程
畫太陽(yáng)光芒的程序如下:
TO TYG
SETPC 14
REPEAT 30[PU FD 60 PD FD 20 PU BK 80 PD
RT 360/30]
END
擦除太陽(yáng)光芒的程序如下:
TO TYGPE
REPEAT 30[PU FD 60 PE FD 20 PU BK 80 PD
RT 360/30]
END
太陽(yáng)光旋轉(zhuǎn)的程序如下:
TO SHINE
DRAW SETPC 12
(STAMPOVAL 50 50 “TRUE)
REPEAT 72[ TYG WAIT 10 TYGPE RT 360/72]
END
2.1.3 使圖像移動(dòng)的編程技巧
使圖像移動(dòng)的編程技巧如圖3所示。
圖3 使圖像移動(dòng)的編程技巧
2.2 C程序設(shè)計(jì)方法
2.2.1 四種常用方法
使用C語(yǔ)言來(lái)設(shè)計(jì)動(dòng)態(tài)圖像的方法有很多:
(1) 利用動(dòng)態(tài)開辟圖視口方法。在位置動(dòng)態(tài)變化,但大小不變的圖視口中(用setviewpot()函數(shù))設(shè)置固定圖形。這樣,呈現(xiàn)在觀察者面前的是當(dāng)前圖視口位置在動(dòng)態(tài)變化,因而在屏上看到的圖像就好像在動(dòng)態(tài)變化一樣。
(2) 利用顯示頁(yè)和編輯頁(yè)交替變化。將當(dāng)前顯示頁(yè)和編輯頁(yè)分開(用setvisualpage()和setactivepage()函數(shù)),在編輯頁(yè)上畫好圖形后,立即令該頁(yè)變?yōu)轱@示頁(yè);然后在上次顯示頁(yè)上進(jìn)行畫圖,畫好后,再交換;如此反復(fù),觀察者的視覺(jué)上就出現(xiàn)了動(dòng)態(tài)變化的效果。
(3) 利用畫面存儲(chǔ)再重放的方法。像制作幻燈片一樣,將整個(gè)動(dòng)畫過(guò)程變成一個(gè)個(gè)片斷,然后存儲(chǔ)到顯示緩沖區(qū)內(nèi)。當(dāng)它們按順序重放到屏幕上時(shí),就出現(xiàn)了動(dòng)態(tài)變化效果。
(4) 直接對(duì)圖像動(dòng)態(tài)存儲(chǔ)器進(jìn)行操作。利用顯示適配器上控制圖像顯示的各種寄存器和圖像存儲(chǔ)器VRAM,對(duì)其進(jìn)行直接操作和控制,從而高效且快速地實(shí)現(xiàn)圖像動(dòng)態(tài)效果。
利用上述4種方法均可以設(shè)計(jì)動(dòng)態(tài)圖像,但其操作比較復(fù)雜,且在程序中要對(duì)圖像不斷進(jìn)行存取操作,需要耗費(fèi)大量?jī)?nèi)存資源。利用擦除法動(dòng)態(tài)圖像設(shè)計(jì)可以解決上述問(wèn)題。
2.2.2 擦除法動(dòng)態(tài)圖像設(shè)計(jì)
擦除法動(dòng)態(tài)圖像設(shè)計(jì)在很多動(dòng)畫制作工具(如Flash)中大量使用,但在程序設(shè)計(jì)中卻少有人用。它的設(shè)計(jì)原理是利用同色原理,在圖形色與背景色相同時(shí)人眼不能感知。在程序設(shè)計(jì)中,當(dāng)一個(gè)位置畫了一張圖像時(shí),使圖像色與背景色相異;然后再到另一個(gè)位置畫一張圖像并使圖像色與背景色也相異。此時(shí),將先前畫的圖像在原位置再畫一張,并使圖像色與背景色相同,這樣人眼只能看到新畫的一張圖像而看不到先前畫的圖像,從而先前畫的圖像感覺(jué)被擦除了。這樣連續(xù)畫多張圖像,并在每畫一張新的圖像時(shí)將原有的圖像擦除,即可實(shí)現(xiàn)觀察者角度的動(dòng)態(tài)效果。
2.3 CBuilder中進(jìn)行動(dòng)態(tài)圖像設(shè)計(jì)
動(dòng)態(tài)圖像設(shè)計(jì)中兩個(gè)非常重要的方面就是圖形的產(chǎn)生及對(duì)時(shí)間的控制。CBuilder 5為解決這兩個(gè)問(wèn)題提供了良好的方案:一方面,可以利用現(xiàn)成的Shape組件產(chǎn)生常見的圖像形體;另一個(gè)方面,可以利用Timer組件,對(duì)動(dòng)畫的時(shí)間進(jìn)行準(zhǔn)確的控制。
讀者可以自行查找CBuilder 5應(yīng)用指南中的相關(guān)示例應(yīng)用程序,以了解其設(shè)計(jì)方法。
2.4 利用Java Applet編程實(shí)現(xiàn)圖像動(dòng)態(tài)
2.4.1 Java中實(shí)現(xiàn)動(dòng)態(tài)圖像的原理
在Java中實(shí)現(xiàn)動(dòng)態(tài)圖像有很多種辦法,但其基本原理是一樣的,即在屏幕上畫出一系列的幀來(lái)造成運(yùn)動(dòng)的感覺(jué)。為了每秒鐘多次更新屏幕,必須創(chuàng)建一個(gè)線程來(lái)實(shí)現(xiàn)動(dòng)態(tài)圖像的循環(huán),這個(gè)循環(huán)要跟蹤當(dāng)前幀,并響應(yīng)周期性屏幕更新的要求。
動(dòng)態(tài)圖像設(shè)計(jì)中最常遇到的問(wèn)題便是屏幕會(huì)出現(xiàn)閃爍現(xiàn)象。閃爍有兩個(gè)原因:一是繪制每一幀花費(fèi)的時(shí)間太長(zhǎng)(因?yàn)橹乩L時(shí)要求的計(jì)算量大);二是在每次調(diào)用Pain()前,Java 會(huì)用背景顏色重畫整個(gè)畫面,當(dāng)進(jìn)行下一幀計(jì)算時(shí),用戶看到的是背景。
有兩種方法可以明顯地減弱閃爍:重載 update()或使用雙緩沖。
2.4.2 重載update()方法減弱閃爍
當(dāng)AWT接收到一個(gè)applet的重繪請(qǐng)求時(shí),它就調(diào)用applet的 update();默認(rèn)地用update() 清除applet的背景,然后調(diào)用 paint()。重載 update(),將以前在paint()中的繪圖代碼包含在update()中,從而避免每次重繪時(shí)將整個(gè)區(qū)域清除。
使用update()方法不會(huì)清除整個(gè)畫面,只是消除必要的部分。
2.4.3 使用雙緩沖方法減弱閃爍
雙緩沖方法在許多Applet中被使用。其主要原理是創(chuàng)建一個(gè)后臺(tái)圖像,將需要繪制的一幀畫入圖像,然后調(diào)用DrawImage()將整個(gè)圖像一次畫到屏幕上去;其好處是大部分繪制是離屏的,將離屏圖像一次繪至屏幕上比直接在屏幕上繪制要有效得多,大大提高了做圖的性能。
雙緩沖可以使圖像動(dòng)得平滑,但有一個(gè)缺點(diǎn)是它需要分配一張后臺(tái)圖像,所以,如果圖像相當(dāng)大,就將需要很大的內(nèi)存。
2.5 Windows API實(shí)現(xiàn)動(dòng)態(tài)圖像的基本方法
在Windows中實(shí)現(xiàn)動(dòng)態(tài)圖像的方式有很多種,但基本原理卻非常類似。即:在初始位置顯示初始圖形,經(jīng)過(guò)短暫的延時(shí)后,去除掉初始圖形,并在新的位置顯示新的圖形;這些步驟加以循環(huán),便形成了動(dòng)態(tài)的效果(這里應(yīng)該首先掌握Windows調(diào)色板及三元光柵操作的基本概念)。
比如,計(jì)算機(jī)上實(shí)現(xiàn)“淡入淡出”技術(shù),采用的辦法是在已顯示的位圖A上,不斷開些小洞,在小洞內(nèi)顯示位圖B的像素,隨著小洞逐漸增多,位圖A越來(lái)越模糊,位圖B越來(lái)越清晰,最后,位圖A消失,位圖B完整地顯示出來(lái)。
以下為常用動(dòng)態(tài)圖像設(shè)計(jì)方法:
接下來(lái)結(jié)合C++程序介紹一些Windows下常用的動(dòng)態(tài)圖像設(shè)計(jì)方法。
(1) 底色覆蓋法
底色覆蓋法是利用屏幕底色將原始圖形覆蓋掉,該法實(shí)現(xiàn)的動(dòng)態(tài)圖像具有明顯的閃爍效果。
(2) 多圖片切換法
這種動(dòng)態(tài)圖像實(shí)現(xiàn)方法的效果類似于Gif動(dòng)態(tài)圖像的效果。其原理是將動(dòng)態(tài)圖像的幀事先繪制出來(lái),存為位圖文件或位圖資源,并按照動(dòng)態(tài)圖像的順序?yàn)檫@些幀加以編號(hào)。當(dāng)要顯示動(dòng)態(tài)圖像時(shí),在指定的位置,間隔適當(dāng)?shù)臅r(shí)間,按照順序顯示已經(jīng)繪制好的位圖幀,從而達(dá)到動(dòng)態(tài)圖像的目的。
下面是利用這種方式實(shí)現(xiàn)的動(dòng)態(tài)圖像程序框架:
// bm[ ]為多張位圖文件的路徑及文件名數(shù)組,按照順序儲(chǔ)存了多張位圖
// picBox為PictureBox控件的一個(gè)實(shí)例
for( i=0; i { picBox->Picture = bm[i];//選中位圖 ::Seep(100); // 延時(shí) if( i == len(hbm) - 1 ) i = -1 } (3) 異或方式 利用異或方式實(shí)現(xiàn)動(dòng)態(tài)圖像的例子比較多,比如繪圖軟件中的“橡皮筋技術(shù)”。 “異或”是一種邏輯組合的方式(在Windows編程中,繪圖顏色的各種邏輯組合操作被稱為“光柵操作”)。在這種繪圖模式下進(jìn)行繪圖,源顏色與屏幕底色將會(huì)進(jìn)行異或邏輯組合,實(shí)際顯示的顏色將會(huì)是邏輯組合后的顏色,而且用相同的顏色在同一位置繪圖兩次,其效果和沒(méi)有繪圖時(shí)完全相同。下面是利用異或方式進(jìn)行繪圖的程序結(jié)構(gòu)框架。 // 設(shè)置當(dāng)前繪圖方式為異或方式,hDC為用來(lái)繪圖的設(shè)備對(duì)象HDC ::SetROP2(hDC,R2_XORPEN); while( 條件 ) { 在(x,y)位置用顏色color繪圖。 延時(shí)。 重新在(x,y)位置用顏色color繪圖,這時(shí)原來(lái)繪制的圖形將會(huì)被消除。 更新(x,y)坐標(biāo)或color顏色,為在下一個(gè)循環(huán)中繪圖做準(zhǔn)備。 } (4) 像素操作 首先用GetPixel()函數(shù)得到初始屏幕某位置像素的顏色,并保存起來(lái);然后在該位置進(jìn)行繪圖;經(jīng)過(guò)延時(shí)后,利用SetPixel()函數(shù),用事先保存好的顏色在原位置上覆蓋掉已經(jīng)繪制的圖形,并更新位置參數(shù);接著進(jìn)行下一個(gè)循環(huán)。 (5) 多緩沖技術(shù) 多緩沖技術(shù)是將圖形繪制在不同的幀中,通過(guò)將屏幕在這些不同的幀之間進(jìn)行切換來(lái)達(dá)到動(dòng)態(tài)圖像效果。具體的幀數(shù)目可以根據(jù)實(shí)際動(dòng)態(tài)圖像的需要自行確定。 在Nord-Tec SoftWare開發(fā)的Nord-Tec Snow Flakes屏幕保護(hù)程序中,逼真的雪花動(dòng)態(tài)圖像便是利用這種技術(shù)實(shí)現(xiàn)的。 3 需要安裝第三方軟件的動(dòng)態(tài)圖像設(shè)計(jì)方法 3.1 可以快速生成圖論模型的Ubigraph Ubigraph是一個(gè)全新的圖論生成軟件。還有一個(gè)類似的軟件graphviz,但Ubigraph顯然更強(qiáng)大一些,并且也相當(dāng)易用。graphviz有它自己的語(yǔ)法規(guī)則,而Ubigraph則直接支持Python,Ruby, PHP,Java,C,C++等幾乎所有主流語(yǔ)言,因此不管原先使用的是什么語(yǔ)言,都可以很快地融入到Ubigraph中來(lái)。例如,在C語(yǔ)言中包含一個(gè)頭文件UbigraphAPI.h,便可以像往常一樣用循環(huán)語(yǔ)句“畫”一個(gè)環(huán)。 #include int main(int const argc,const char ** const argv) { int i; for (i=0; i < 10; ++i) ubigraph_new_vertex_w_id(i); for (i=0; i < 10; ++i) ubigraph_new_edge(i,(i+1)%10); sleep(2); ubigraph_clear(); } 3.2 利用Flash設(shè)計(jì)動(dòng)態(tài)圖像 Flash是一種功能強(qiáng)大的矢量動(dòng)畫軟件,如果在VC程序中能夠播放FLASH,將為程序增色不少,而且可以輕松實(shí)現(xiàn)許多原本不易實(shí)現(xiàn)的功能(金山詞霸的安裝程序主控界面就利用了FLASH,效果相當(dāng)好)。 這樣可以通過(guò)FLASH教材中實(shí)現(xiàn)一個(gè)完整多媒體軟件的具體方法來(lái)了解它的一些關(guān)鍵性技術(shù),以及在VC中如何使用COM接口對(duì)ms agent 進(jìn)行操作,如何使用信號(hào)燈來(lái)實(shí)現(xiàn)同步問(wèn)題等高級(jí)話題。 3.3 DirectDraw技術(shù)
3.3.1 DirectDraw的概念
DirectX又名Game SDK,其最大特點(diǎn)是直接對(duì)硬件的抽象層(HAL)進(jìn)行操作,利用該特點(diǎn)可制作出高性能的Windows游戲。DirectDraw就是DirectX的6個(gè)組件之一,是DirectX的基礎(chǔ)。
3.3.2 應(yīng)用DirectDraw進(jìn)行動(dòng)態(tài)圖像設(shè)計(jì)的原理
DirectDraw使用頁(yè)面切換的方法實(shí)現(xiàn)圖像動(dòng)態(tài)。它不僅可以訪問(wèn)系統(tǒng)內(nèi)存,還可以訪問(wèn)顯示內(nèi)存,這是以往的Windows程序所不能的。如果采用MFC中的CDC類進(jìn)行繪圖,則不能直接訪問(wèn)顯存。另外,利用DirectDraw還可以生成、移動(dòng)、剪切、轉(zhuǎn)換、合成圖像數(shù)據(jù),從而編寫出各種“炫麗多彩”圖形的應(yīng)用程序。
在用DirectDraw編寫程序時(shí),先要?jiǎng)?chuàng)建若干個(gè)圖形數(shù)據(jù)緩沖區(qū),這些緩沖區(qū)稱為表面。當(dāng)發(fā)生表面翻頁(yè)時(shí),后備緩沖區(qū)就成為可見的,而以前的可見主表面則成為后備緩沖區(qū),如圖4所示。
圖4 創(chuàng)建圖形數(shù)據(jù)緩沖區(qū)
雖然顯示器屏幕每秒鐘刷新很多次,但每次都是反復(fù)讀取可見主表面中存儲(chǔ)的顯示頁(yè)信息。只有當(dāng)施行翻頁(yè)操作后,兩頁(yè)的內(nèi)容互換。已經(jīng)完成了的在原后備緩沖區(qū)的改動(dòng)才會(huì)顯示在屏幕上,而這個(gè)互相拷貝的過(guò)程幾乎是瞬間完成的,與每次刷新所用的時(shí)間差了幾乎幾十萬(wàn)個(gè)數(shù)量級(jí),人眼根本察覺(jué)不到,所以用這種方法可以實(shí)現(xiàn)不閃爍、平滑、優(yōu)質(zhì)的動(dòng)畫效果。
在DirectDraw中,典型的blt操作(Bltting是用于復(fù)制圖形的語(yǔ)言,可以將圖像從一處拷貝到另一處,例如CDC類的BitBlt()就是具有這樣功能的函數(shù)。)是將離屏表面的內(nèi)容拷貝到一個(gè)后備緩沖區(qū),如圖5所示。
圖5 blt操作
3.3.3 編寫DirectDraw應(yīng)用程序的流程
DirectDraw程序的大概流程如下:先創(chuàng)建DDraw對(duì)象,再進(jìn)行相關(guān)的設(shè)置,然后繪制后備緩沖區(qū)頁(yè),最后執(zhí)行翻頁(yè)操作。這樣循環(huán)就會(huì)產(chǎn)生很好的動(dòng)態(tài)圖像效果。
4 用于動(dòng)態(tài)圖像設(shè)計(jì)的幾種腳本語(yǔ)言
4.1 JSP技術(shù)
JSP(Java Server Pages)是一種動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)標(biāo)準(zhǔn),Web服務(wù)器在遇到訪問(wèn)JSP網(wǎng)頁(yè)的請(qǐng)求時(shí),首先執(zhí)行其中的程序片段,然后將執(zhí)行結(jié)果以HTML格式返回給客戶。程序片段可以操作數(shù)據(jù)庫(kù),重新定向網(wǎng)頁(yè)以及發(fā)送 email 等,這就是建立動(dòng)態(tài)網(wǎng)站所需要的功能。在JSP頁(yè)面(或者servlet)可以繪制并發(fā)送動(dòng)態(tài)圖像。
4.2 PHP語(yǔ)言
超文本預(yù)處理器(Hypertext Preprocessor,PHP)是一種簡(jiǎn)單、面向?qū)ο?、解釋型、健壯、安全、性能非常高、?dú)立于架構(gòu)、可移植、動(dòng)態(tài)服務(wù)器端的 HTML 腳本/編程語(yǔ)言。它最有意義的特性是支持大范圍的數(shù)據(jù)庫(kù)(當(dāng)前支持的數(shù)據(jù)庫(kù)包括:Adabas D InterBase Solid,dBase mSQL Sybase,Empress MySQL Velocis,FilePro Oracle Unix dbm,Informix PostgreSQL)。
只要安裝一些第三方的庫(kù)文件,并具有一定的幾何知識(shí),利用PHP創(chuàng)建動(dòng)態(tài)圖像是相當(dāng)容易的一件事情(具體方法參加PHP相關(guān)教程)。
4.3 年輕的Python
這種語(yǔ)言具有非常簡(jiǎn)捷而清晰的語(yǔ)法特點(diǎn),適合完成各種高層任務(wù),幾乎可以在所有的操作系統(tǒng)中運(yùn)行。在Nokia智能手機(jī)所采用的Symbian操作系統(tǒng)上,Python成為繼C++,Java之后的第三個(gè)編程語(yǔ)言,它完全可以編寫動(dòng)態(tài)圖像。雖然Python的運(yùn)行速度比Java快,但無(wú)法和需要編譯的語(yǔ)言相比。
在實(shí)際開發(fā)中常見的一種應(yīng)用情形是使用Python快速生成程序的原型(有時(shí)甚至是程序的最終界面);然后對(duì)其中有特別要求的部分,用更合適的語(yǔ)言改寫,比如3D游戲中的圖形渲染模塊,其速度要求非常高,所以可以用C++重寫。
5 諸多動(dòng)畫設(shè)計(jì)方法的比較分析
上文已經(jīng)對(duì)各種動(dòng)態(tài)圖像設(shè)計(jì)方法進(jìn)行了較為詳細(xì)的羅列比較,此處做一匯總。
Logo語(yǔ)言的設(shè)計(jì)方法最為簡(jiǎn)單,并且其本身就是一種繪畫語(yǔ)言,但相應(yīng)地也就不勝任制作較為復(fù)雜的動(dòng)態(tài)圖像。
C語(yǔ)言有5種用以設(shè)計(jì)動(dòng)態(tài)圖像的常用方法,是耗費(fèi)資源比較少,而執(zhí)行速度比較快的首選擦除法。C語(yǔ)言是嵌入式系統(tǒng)開發(fā)使用最多的語(yǔ)言,并且在高中低檔的系統(tǒng)都可以使用,因而采用C語(yǔ)言的所有動(dòng)態(tài)圖像設(shè)計(jì)方法理論上均適用于嵌入式系統(tǒng)的屏幕開發(fā)。
采用CBuilder語(yǔ)言設(shè)計(jì)動(dòng)態(tài)圖像,可以方便地利用現(xiàn)成的組件產(chǎn)生圖像及控制時(shí)間。
Java通過(guò)定義線程的方法來(lái)控制動(dòng)畫時(shí)間,然而使用圖像動(dòng)的平滑的雙緩沖方法需要很大內(nèi)存,因而更常用的消除畫面閃爍的辦法是重載update()。
C++中可供選擇的方法很多。簡(jiǎn)單的動(dòng)態(tài)圖像(如不斷閃爍的星星)可以采用底色覆蓋法;在屏幕的固定位置顯示動(dòng)態(tài)圖像時(shí)可以選擇多圖片切換法;利用異或方式進(jìn)行繪圖,不會(huì)發(fā)生全屏幕閃動(dòng),通常效果較好,但若反復(fù)使用,在所清除圖像處會(huì)產(chǎn)生閃爍,仍不是很完美;像素操作一般與其他動(dòng)態(tài)圖像實(shí)現(xiàn)方法(如底色覆蓋)相結(jié)合使用;多緩沖技術(shù)類似C中的雙緩沖技術(shù)原理,只不過(guò)雙緩沖只繪制一份備用圖像作為離屏圖像,而多緩沖則將圖形繪制在多個(gè)不同幀中,將屏幕在這些幀之間進(jìn)行切換。Graphviz和Ubigraph都是圖論生成軟件,但Ubigraph功能更強(qiáng)。利用它可以快速生成圖論模型的圖形和動(dòng)態(tài)圖像,直觀地展示出各種圖論模型的三維結(jié)構(gòu),演示各種圖論算法的過(guò)程,非常適合用于研究和教學(xué)。
Flash所用到的高級(jí)技術(shù)比較多,不過(guò)為了能夠做出精美的電影特技效果的動(dòng)態(tài)圖像,還是值得對(duì)其進(jìn)行深入研究的。
DirectDraw使用頁(yè)面切換的方法實(shí)現(xiàn)圖像動(dòng)態(tài),它不僅可以訪問(wèn)系統(tǒng)內(nèi)存,還可以訪問(wèn)顯示內(nèi)存,在實(shí)現(xiàn)圖像動(dòng)態(tài)的同時(shí)不會(huì)使畫面閃爍,是一種“完美切換”技術(shù)(直接從第一個(gè)畫面切換到第二個(gè)畫面),因此DirectDraw技術(shù)很受程序員青睞,尤其在虛擬現(xiàn)實(shí)技術(shù)中應(yīng)用廣泛。
當(dāng)然,若對(duì)美術(shù)工藝有特殊要求,則需要掌握更專業(yè)的技術(shù),如顏色鎖結(jié)及用于3D效果的Z排序與視差等。
當(dāng)動(dòng)態(tài)圖像應(yīng)用于網(wǎng)絡(luò)時(shí),可以選擇直接使用腳本語(yǔ)言設(shè)計(jì),譬如JSP,PHP等。
Python可作為嵌入式系統(tǒng)的開發(fā)語(yǔ)言,在Nokia智能手機(jī)所采用的Symbian操作系統(tǒng)上已得到證明。它的最大優(yōu)勢(shì)是能夠很輕松地把使用其他語(yǔ)言制作的各種模塊(尤其是C/C++)輕松地聯(lián)結(jié)在一起。由此既可以直接使用Python設(shè)計(jì)簡(jiǎn)單的動(dòng)態(tài)圖像,也可以將對(duì)速度要求更高的復(fù)雜動(dòng)態(tài)圖像通過(guò)C++編寫后嵌入到Python程序中。
6 結(jié) 語(yǔ)
最后值得提及的是,動(dòng)態(tài)圖像的實(shí)現(xiàn)涉及到許多難度各異的相關(guān)技術(shù)。程序設(shè)計(jì)中在考慮采用何種方法實(shí)現(xiàn)動(dòng)態(tài)圖像的同時(shí),也要了解一些相關(guān)領(lǐng)域的知識(shí),如美學(xué)、數(shù)學(xué)等,只有這樣,才能使制作出的動(dòng)態(tài)圖像更加逼真,更加吸引人。
參考文獻(xiàn)
[1]李笑緣.動(dòng)畫設(shè)計(jì)教程[M].上海:上海人民美術(shù)出版社,2007.
[2]莫治雄,熊偉建.FlashMX網(wǎng)上動(dòng)畫編程指南[M].北京:北京希望電子出版社,2003.
[3]甘泉.PC游戲編程[M].北京:清華大學(xué)出版社,2003.
[4]徐保民.PHP編程基礎(chǔ)及應(yīng)用實(shí)例集錦[M].北京:人民郵電出版社,2001.
[5]楊勇.3DS MAX5基礎(chǔ)教程[M].北京:中國(guó)水利水電出版社,2003.
[6]孫兆林.VB.NET多媒體編程[M].北京:北京希望電子出版社,2002.
[7]呂傳興,王能.Logo程序設(shè)計(jì)[M].上海:上??茖W(xué)技術(shù)文獻(xiàn)出版社,2006.
[8]求是科技.Windows API程序設(shè)計(jì)參考大全[M].北京:人民郵電出版社,2006.
[9]Paul Tremblett.JSP即時(shí)應(yīng)用[M].北京:人民郵電出版社,2001.
[10]Martin C.Brown.Python技術(shù)參考大全[M].北京:清華大學(xué)出版社,2002.