邢江濤
(晉城職業(yè)技術(shù)學(xué)院,山西 晉城 048026)
利用Flash AS3.0開發(fā)三維動畫應(yīng)用探討
邢江濤
(晉城職業(yè)技術(shù)學(xué)院,山西 晉城 048026)
FLASH因?yàn)槠渚邆浣换バ允噶縿赢嫷葍?yōu)點(diǎn)得到了極為廣泛的應(yīng)用。但是一般FLASH動畫卻幾乎都是二維的。文章介紹了Flash中實(shí)現(xiàn)三維的基本原理,并通過一個(gè)具體實(shí)例介紹了在Flash二維的世界里如何表現(xiàn)三維對象的方法。
Flash;ActionScript;三維動畫
我們所生活的世界是一個(gè)由X、Y、Z軸(也就是長寬高)組成的三維世界。在動畫的3D空間中我們要在X、Y之外再建立另一個(gè)維度Z,即深度。FLASH本身并沒有內(nèi)置的Z維度,但是我們可以使用ActionScript來創(chuàng)建它。
透視就是我們怎么表示某個(gè)物體靠近我們或遠(yuǎn)離我們。例如:當(dāng)物體離我們越來越遠(yuǎn)時(shí)它們會變得越來越小,當(dāng)移動到最后離我們足夠遠(yuǎn)時(shí)會它們會聚集在一個(gè)滅點(diǎn)上。要在一個(gè)二維平面上表現(xiàn)出三維的信息,我們首先必須要去掉三個(gè)坐標(biāo)軸中的一個(gè)——z軸(表示物體深度的軸),如圖1所示。

圖1
確定z值包括三個(gè)要素:有一個(gè)距離你有一段距離的物體;一個(gè)視點(diǎn)——你的眼睛;一個(gè)圖像平面——電腦屏幕。
知道大致原理后,我們來看個(gè)具體的例子。
在三維坐標(biāo)系中的每個(gè)點(diǎn)都對應(yīng)著唯一的一組X、Y、Z坐標(biāo)量。因此,我們可以建立一個(gè)數(shù)組,命名為points,通過數(shù)組來依次存放各點(diǎn)的坐標(biāo)值。對于長方體來說(如圖2),它是由8個(gè)點(diǎn)組成的。代碼如下:

圖2


在這里的Point3D類存儲著坐標(biāo)屬性,用于傳遞X、Y、Z的位置。主要代碼為:


圖3 前面
觀察傳統(tǒng)的3D模型我們會發(fā)現(xiàn),在許多3D建模和渲染程序中,所有的模型在最終渲染之前都被簡化成一系列的三角形。使用三角形在繪制復(fù)雜的形體時(shí)會比較容易。這樣我們可以建立一個(gè)函數(shù)來用三個(gè)點(diǎn)渲染一個(gè)三角形:一個(gè)循環(huán)遍歷點(diǎn)的列表,定位它們并應(yīng)用透視;另一個(gè)循環(huán)用來遍歷三角形列表并渲染每一個(gè)三角形。
在定義三角形之前,我們?nèi)院投x點(diǎn)一樣創(chuàng)建一個(gè)Triangle類來跟蹤每一個(gè)三角形的點(diǎn),并定義一個(gè)數(shù)組來存放三角形列表。
定義三角形:立方體的每一個(gè)面可以由兩個(gè)三角形構(gòu)成(如圖3、圖4),總共有12個(gè)三角形。另外,我們一定要按照順時(shí)針方向列出每個(gè)三角形的點(diǎn),這樣旋轉(zhuǎn)起來就不會出現(xiàn)意想不到的錯(cuò)誤。主要代碼如下:


圖4 后面
傳統(tǒng)的2D動畫中,進(jìn)行旋轉(zhuǎn)時(shí)都是圍繞Z軸進(jìn)行的,也就是說只有X和Y坐標(biāo)在發(fā)生變化。在3D動畫中,我們可以圍繞任意的一個(gè)軸進(jìn)行旋轉(zhuǎn),比如制作一個(gè)向你飛來的一個(gè)外星飛碟,那么它的旋轉(zhuǎn)軸就是Y軸,所有點(diǎn)都圍繞它旋轉(zhuǎn)并改變它們的Y和Z的位置。因此,對于3D動畫來說,當(dāng)你在一個(gè)軸上旋轉(zhuǎn)物體時(shí),它的位置將在其他兩個(gè)軸上發(fā)生改變。這樣我們可以推演出幾個(gè)結(jié)論:
以Z軸為旋轉(zhuǎn)軸

現(xiàn)在我們需要在Point3D類中加入上述坐標(biāo)移動的方法,代碼如下:


最后,我們在ActionScript腳本代碼中加入EnterFrame事件,ENTERFRAME事件屬于所有畫面和影片剪輯。將事件處理函數(shù)添加到這些對象的時(shí)間軸時(shí),會根據(jù)幀速率反復(fù)調(diào)用相關(guān)的事件處理函數(shù)。代碼如下:

隨著新的腳本語言ActionScrip3.0和針對Flash Player9的全新的虛擬機(jī)的引入,F(xiàn)lash平臺發(fā)生了革命性的變化。文章主要通過一個(gè)三維動畫的實(shí)例闡述了FLASH ActionScrip3.0腳本語言的強(qiáng)大功能,本實(shí)例在Adobe Flash CS3 Professional環(huán)境下測試通過,但是在功能上其實(shí)是相當(dāng)簡陋的。
TP391.414
A
1673-2014(2011)05-0074-03
2011—05—13
邢江濤(1977—),男,山西陽城人,碩士,主要從事多媒體應(yīng)用研究。
(責(zé)任編輯 王建華)