vb實現(xiàn)簡單動畫的方法和實例:基本原理_第1頁
vb實現(xiàn)簡單動畫的方法和實例:基本原理_第2頁
vb實現(xiàn)簡單動畫的方法和實例:基本原理_第3頁
vb實現(xiàn)簡單動畫的方法和實例:基本原理_第4頁
vb實現(xiàn)簡單動畫的方法和實例:基本原理_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

計算機動畫第二講計算機動畫的編程基礎(chǔ)本講內(nèi)容提要1.計算機動畫的圖形基礎(chǔ)

1.1圖形及其動態(tài)顯示

1.2顏色模型

1.3圖形變換

1.4曲線和曲面2.計算機動畫的關(guān)鍵技術(shù)3.用編程語言設(shè)計動畫簡介

3.1用VB設(shè)計動畫

3.2用java設(shè)計動畫

3.3用VC++設(shè)計動畫1.1圖形及其動態(tài)顯示圖形(矢量圖)與圖像(點陣圖)計算機中表示圖的方法點陣表示:枚舉出圖形中所有的點簡稱為圖像(數(shù)字圖像)參數(shù)表示:形狀參數(shù)+屬性參數(shù)簡稱為圖形動態(tài)圖形顯示繪制-擦除-再畫亮-滅-亮1.2顏色模型光與彩色三基色原理各種顏色模型顏色管理技術(shù)顏色管理是一個系統(tǒng),用于確保彩色內(nèi)容在任何位置的呈現(xiàn)效果都讓您滿意,包括不同設(shè)備。為什么需要顏色管理?----不同類型的設(shè)備往往會有不同的顏色特征和功能。因為每個設(shè)備呈現(xiàn)彩色內(nèi)容的過程是根本不同的。如果沒有一致的顏色管理系統(tǒng),相同的圖片在各個設(shè)備上的顯示效果便會不同。因此,顏色管理將維護彩色內(nèi)容中的關(guān)系,從而在具有不同的顏色功能的設(shè)備上以及在不同的查看條件下能夠獲得可以接受的顯示效果。1.3圖形變換坐標(biāo)系各種坐標(biāo)系及其之間的變換圖形變換過程二維三維變換、齊次坐標(biāo)、復(fù)合變換窗口和視區(qū)的變換正投影圖與透視圖觀察坐標(biāo)系中的投影變換投影分類投影中心與投影平面之間的距離為無限

投影中心與投影平面之間的距離為有限

三視圖:正視圖、側(cè)視圖和俯視圖1.4曲線和曲面基本概念Bezier曲線和曲面B樣條曲線和曲面非均勻有理B樣條(NURBS)曲線和曲面

2、計算機動畫關(guān)鍵技術(shù)參數(shù)關(guān)鍵幀技術(shù)樣條驅(qū)動技術(shù)變形技術(shù)過程動畫技術(shù)關(guān)節(jié)動畫與人體動畫技術(shù)基于物理模型的動畫技術(shù)行為動畫技術(shù)運動捕捉技術(shù)三維掃描技術(shù)2、計算機動畫關(guān)鍵技術(shù)1.參數(shù)keyframe給出兩幅關(guān)鍵幀,計算機生成中間畫面剛體運動模擬早期僅僅用來插值幀與幀之間卡通畫的形狀后來對運動參數(shù)插值,實現(xiàn)對動畫的運動控制

第1幀和第8幀是關(guān)鍵幀,其余各幀(2-7幀)可由插值算法生成

2、計算機動畫關(guān)鍵技術(shù)可歸結(jié)為關(guān)鍵參數(shù)的插值問題位置、色彩、紋理9個運動參數(shù)決定位置參數(shù):Tx,Ty,Tz,方向參數(shù):Rx,Ry,Rz,比例參數(shù):Sx,Sy,Sz2、計算機動畫關(guān)鍵技術(shù)與純數(shù)學(xué)插值問題不同:一個特定的運動從空間軌跡來看可能是正確的但從運動學(xué)或動畫設(shè)計角度看,則可能是錯誤的關(guān)鍵幀插值要求:能產(chǎn)生逼真的運動效果用戶能方便有效地控制運動的運動學(xué)特性例如,通過調(diào)整插值函數(shù)改變運動的速度和加速度勻速運動的模擬:

假定需在時間段t1與t2之間插入n(n=5)幀終始關(guān)鍵幀之間的時間段被分為n+1個子段其時間間隔為:

△t=(t2–t1)/(n+1)

則任一插值幀的時刻為: j=1,2,…,n

2、計算機動畫關(guān)鍵技術(shù)△tt1t2

加速運動的模擬:

為使幀間的時間間隔增加可使用下列三角加速函數(shù)來得到增加的間隔:

1-cosθ,0<θ<π/2

對于插值幀來說,第j個插值幀的時刻可由下式得到:

j=1,2,…,n

2、計算機動畫關(guān)鍵技術(shù)1-cosθcosθt1t2減速運動的模擬:

使用下列三角減速函數(shù)來得到減少的間隔:

sinθ,0<θ<π/2,

則第j個插值幀的時間位置被定義成:

j=1,2,…,n 2、計算機動畫關(guān)鍵技術(shù)sinθt1t2混合增減速度的模擬:

先增加插值時間間隔后減少時間間隔所使用的時間變化函數(shù)是:

1/2

(1–cosθ) 0<θ<π得到第j個插值幀的時刻為:

j=1,2,…,n 2、計算機動畫關(guān)鍵技術(shù)(1-cos)/2θcosθt1t22、計算機動畫關(guān)鍵技術(shù)關(guān)鍵幀動畫存在的主要問題交互響應(yīng)慢物體運動的物理正確性和自然真實性難以保證2、計算機動畫關(guān)鍵技術(shù)2.樣條驅(qū)動技術(shù)用戶事先指定一條物體運動的軌跡通常用三次參數(shù)樣條表示指定物體沿該軌跡運動,也稱運動軌跡法所要解決的基本問題通過對樣條曲線等間隔采樣,求出物體在某一幀的位置,從而生成整個動畫序列如果直接對參數(shù)空間進行等間隔采樣,勢必帶來運動的不均勻性勻速運動時,需要對樣條進行弧長參數(shù)化2、計算機動畫關(guān)鍵技術(shù)為解決插值的時間控制問題(用雙插值方法)位置樣條空間軌跡曲線

物體位置對關(guān)鍵幀的函數(shù)運動樣條速度曲線

關(guān)鍵幀對時間的函數(shù)2、計算機動畫關(guān)鍵技術(shù)路徑動畫路徑動畫就是由用戶根據(jù)需要設(shè)定好一個路徑后,使場景中對象沿著路徑進行運動。運動路徑是用戶畫出的動畫對象運動的曲線,由關(guān)鍵點控制。比如模擬飛機的飛行,魚的游動都可以使用路徑動畫來制作。

二維動畫中的運動路徑設(shè)計

2、計算機動畫關(guān)鍵技術(shù)3.變形技術(shù)

柔性物體(softobject)動畫技術(shù)許多商用動畫軟件都提供變形工具Softimage、Alias、Maya、3DSMAX變形動畫示例

2、計算機動畫關(guān)鍵技術(shù)Morphing技術(shù)指將一個給定的數(shù)字圖像或者幾何形狀S以一種自然流暢的、光滑連續(xù)的方式漸變?yōu)榱硪粋€數(shù)字圖像或者幾何形狀T。在這種光滑過渡中,中間幀既具有S的特征,又具有T的特征。

基本思想:移動頂點,通過頂點改變,達到變形給出物體形變的幾個狀態(tài)如兩個物體或兩幅畫面之間特征的對應(yīng)關(guān)系以及相應(yīng)的時間控制關(guān)系物體沿給定的插值路徑進行線性或非線性的形變基于物體表示的變形技術(shù)適用于物體拓撲結(jié)構(gòu)不發(fā)生變化的變形操作2、計算機動畫關(guān)鍵技術(shù)自由變形技術(shù)(FreeFormDeformation:FFD)基本思想不對物體直接進行變形而是對物體所嵌入的空間進行變形引入一種基于三變量B樣條體的變形工具lattice優(yōu)點:最實用,適用面最廣間接的與物體表示無關(guān)的變形方法物體的變形是任意的,可由動畫師任意控制對變形的可控性更強缺點:缺乏對變形的細微控制,如人臉表情2、計算機動畫關(guān)鍵技術(shù)為了解決FFD的不足基于約束的變形,在FFD中,lattice變形和物體變形之間的對應(yīng)關(guān)系并不直觀。簡單約束變形法即用戶定義一系列約束點、所需的偏移量和影響區(qū)域半徑,在每個約束點處定義一個以該點為中心的局部B樣條基函數(shù),該函數(shù)在影響區(qū)域外取值為0。該方法計算量小,在工作站上可實時交互。

軸變形,在FFD中,控制點較多時交互性就較差。基于軸的變形是用物體軸線的變形來控制物體的變形。對軸線設(shè)置動畫是很容易的。用該方法仿真魚的游動,取得了很好的效果。2、計算機動畫關(guān)鍵技術(shù)4.過程動畫技術(shù)ProceduralAnimation或RandomAnimation物體的運動和變形可由一個過程來控制物體的變形不是任意的遵循一定的數(shù)學(xué)模型或物理規(guī)律水波運動,三維森林、草葉隨風(fēng)飄動,火光、煙霧等特殊光效2、計算機動畫關(guān)鍵技術(shù)水波的模擬一個簡單而有效的方法是用正弦波,動畫效果可通過對諸如振幅、相位等參數(shù)來設(shè)置。水波可以用平行波,一種三維空間的正弦波狀曲面來造型。海洋波是一種復(fù)雜的波形,受風(fēng)傳遞的動量所影響,水波的物理過程,頻譜成分能量的傳遞過程,可用由觀測數(shù)據(jù)而得的Pierson-Moskowitz模型去模擬。深水區(qū)域波的模擬,實際波的側(cè)面輪廓線經(jīng)常是多值的、連續(xù)改變形狀的。隨水深不同而有不同傳播速度的波,并有濺水和泡沫。波在淺水區(qū)域減慢,較好地模擬接近海灘的水波。在波的傳播方向上,波的截面輪廓線不一定是正弦波,受風(fēng)驅(qū)動的波其形狀是風(fēng)速的函數(shù)。風(fēng)速加快時,波峰變陡,正弦波只適合于小振幅的情況。可模擬出由風(fēng)引起的波峰的改變,Alias軟件能模擬非常逼真的水波效果。過程動畫模擬的水波效果

2、計算機動畫關(guān)鍵技術(shù)粒子動畫將隨機景物想象成由大量的具有一定屬性的粒子構(gòu)成。根據(jù)各自的動畫,每個粒子都要經(jīng)歷“出生”、“運動和生長”及“死亡”三個階段。每個粒子都有自己的粒子參數(shù),包括初速度、加速度、運動軌跡和生命周期等。這些參數(shù)決定了隨機景物的變化,使用粒子系統(tǒng)可以產(chǎn)生很逼真的隨機景物。動畫劇本不僅可控制粒子的位置和速度,還可控制粒子的外形參數(shù)如顏色、大小、透明度等。由于粒子系統(tǒng)是一個有“生命”的系統(tǒng),它充分體現(xiàn)了不規(guī)則物體的動態(tài)性和隨機性,因而可產(chǎn)生一系列運動進化的畫面,這使模擬動態(tài)的自然景色如火、云、水等成為可能,如火焰、氣流、瀑布等。粒子動畫創(chuàng)作的真實感云層

2、計算機動畫關(guān)鍵技術(shù)群體運動在生物界,許多動物如鳥、魚等以某種群體的方式運動。這種運動既有隨機性,又有一定的規(guī)律性。Reynolds提出的群體動畫成功地解決了這一問題。Reynolds指出,群體的行為包含兩個對立的因素,即既要相互靠近又要避免碰撞。他用三條按優(yōu)先級遞減的原則來控制群體的行為:(1)碰撞避免原則,即避免與相鄰的群體成員相碰;(2)速度匹配原則,即盡量匹配相鄰群體成員的速度;(3)群體合群原則,即群體成員之間盡量靠近。2、計算機動畫關(guān)鍵技術(shù)布料動畫布料動畫不僅包括人體衣服的動畫,還包括旗幟、窗簾、桌布等的動畫。布料動畫的一個特殊應(yīng)用領(lǐng)域為時裝設(shè)計,它將改變傳統(tǒng)的服裝設(shè)計過程,讓人們在衣服做好之前就可看到服裝的式樣和試穿后的形態(tài)。1.基于幾何的布料動畫把布料懸掛在一些約束點上,基于懸鏈線計算出布料自由懸掛時的形狀。該方法不能模擬衣服的皺褶。2.基于物理的布料動畫基于幾何的方法不考慮布料的質(zhì)量、彈性系數(shù)等物理因素,因而很難逼真地生成布料的動畫。用基于物理的方法去模擬。基于彈性理論的描述曲面的運動變形方法。該方法基于動力學(xué)微分方程,把物體形狀和運動的描述統(tǒng)一起來??赡M了旗幟的飄動和地毯的墜落過程。擴展了的方法,很好地模擬了一個穿著衣服的演員的動畫。把布理解成由一系列線穿梭成的交叉點,提出了一個絲織布料的理論模型,很好地模擬了布的懸掛效果,并應(yīng)用于CAD。在布料動畫中,一個瓶頸問題是系統(tǒng)的時間步長必須足夠小,以避免數(shù)值計算的不穩(wěn)定。通過隱式積分方法,Baraff等人提出了一種可以采用大時間步長的衣服仿真系統(tǒng),他們的結(jié)果被刊載在1998年《Siggraph》的封面上,效果非常逼真。2、計算機動畫關(guān)鍵技術(shù)5.關(guān)節(jié)動畫與人體動畫技術(shù)電影《終結(jié)者Ⅱ》、《侏羅紀公園》。但人體和動物動畫的許多問題仍未能很好地解決。是計算機動畫中最富挑戰(zhàn)性的課題之一。其原因就在于人體共有200個以上的自由度,其運動非常復(fù)雜,人的形狀不規(guī)則,人的肌肉隨著人體的運動而變形,人的頭發(fā)、皮膚和衣服模擬起來困難,人的個性、表情千變?nèi)f化等。另外,由于人類對自身的運動非常熟悉,不協(xié)調(diào)的運動很容易被觀察者所察覺。用球體作為基本體素來構(gòu)造人體正向運動學(xué)、逆運動學(xué)、運動學(xué)和動力學(xué)的結(jié)合動力學(xué)中的控制問題、時空約束動畫、虛擬動物的動畫、臉部表情動畫美國哥倫比亞電影公司聯(lián)合制作的全計算機動畫電影《FinalFantasy:TheSpiritsWithin》。其中的女主人公的面部是用計算機動畫技術(shù)制作的,其生動的3D面部表情足以亂真

2、計算機動畫關(guān)鍵技術(shù)6.基于物理模型的動畫技術(shù)

基于物理模型的動畫技術(shù)考慮物體在真實世界中的屬性,如它具有質(zhì)量、轉(zhuǎn)動慣矩、彈性、摩擦力等,并采用動力學(xué)原理自動產(chǎn)生物體的運動。當(dāng)場景中的物體受到外力作用時,牛頓力學(xué)中的標(biāo)準(zhǔn)動力學(xué)方程可用來自動生成物體在各個時間點的位置、方向及其形狀。計算機動畫設(shè)計者不必關(guān)心物體運動過程中的細節(jié),而只需確定物體運動所需的一些物理屬性及一些約束關(guān)系,如質(zhì)量、外力等。2、計算機動畫關(guān)鍵技術(shù)6.基于物理模型的動畫技術(shù)考慮了物體在真實世界中的屬性基于動力學(xué)原理來自動產(chǎn)生物體的運動特別適合于對自然物理現(xiàn)象的模擬如剛體運動模擬、重力、風(fēng)、碰撞檢測、塑性物體變形運動、破裂爆炸以及流體運動模擬等動畫軟件Softimage在基于動力學(xué)的動畫功能方面已相當(dāng)成熟2、計算機動畫關(guān)鍵技術(shù)7.行為動畫(BehavioralAnimation)人物行為動畫,例如行走、站立、奔跑等動作;各類動物的行為動畫,例如飛鳥、野獸等的運動規(guī)律。要求實時性、虛擬現(xiàn)實(VR)相關(guān)文章虛擬人情緒行為動畫模型—人臉群體行為動畫中認知角色的建模方法—魚群虛擬現(xiàn)實中個性行為動畫的實現(xiàn)基于行為建模的人工魚動畫技術(shù)研究2、計算機動畫關(guān)鍵技術(shù)8.運動捕獲技術(shù)(MotionCapture)運動捕獲的過程:真實演員按導(dǎo)演的要求做動作動作被轉(zhuǎn)換為數(shù)字信息,通過感應(yīng)器記錄到計算機中計算機搜集這些數(shù)據(jù)后將信息傳遞到工作室,然后結(jié)果被3D化,在計算機中以線條形式表現(xiàn)出來,形成電影中角色的基礎(chǔ)增加皮膚和外殼之后,那些線條就成為了虛擬角色左圖顯示一個被貼了標(biāo)示物(白色小球)的演員在場地中跑步,右圖是Vicon370系統(tǒng)所采用的特殊紅外照相機,只捕捉白色標(biāo)示物。

2、計算機動畫關(guān)鍵技術(shù)好萊塢的CG人體動作一般都會采用昂貴的動作捕獲系統(tǒng)錄制完成1998年獲奧斯卡視覺效果成就獎的《泰坦尼克》沉船時乘客落水的鏡頭全三維CG影片《最終幻想》人類面部表情2、計算機動畫關(guān)鍵技術(shù)9.三維掃描技術(shù)三維掃描(3Dscanner)技術(shù)又稱為三維數(shù)字化技術(shù),能對立體的實物進行三維掃描,迅速獲得物體表面各采樣點的三維空間坐標(biāo)和色彩信息,從而得到物體的三維彩色數(shù)字模型。部分特殊的三維掃描裝置甚至能得到物體的內(nèi)部結(jié)構(gòu)。與傳統(tǒng)的平面掃描和攝像技術(shù)不同,三維掃描技術(shù)的掃描對象不再是圖紙、照片等平面圖案,而是立體的實物。獲得的不是物體某一個側(cè)面的圖像,而是其全方位的三維信息。其輸出也不是平面圖像,而是對象的三維數(shù)字彩色模型。2、計算機動畫關(guān)鍵技術(shù)由于三維掃描技術(shù)能快速方便地將真實世界的立體彩色信息轉(zhuǎn)換為計算機能直接處理的數(shù)字信號,在影視特技制作、虛擬現(xiàn)實、高級游戲、文物保護等方面得到了廣泛應(yīng)用。它可以將演員、模型、道具等的表面空間和顏色數(shù)據(jù)掃描到計算機中,結(jié)合現(xiàn)代計算機動畫、影視圖像處理技術(shù),對這些圖像做旋轉(zhuǎn)、壓縮、拉伸等各種變化,進行切割、剪裁、拼接等處理,或融入特定的場景中,實現(xiàn)高難度的特技效果,給三維動畫特技制作帶來了極大的便利。3.用編程語言設(shè)計動畫簡介

3.1用VB設(shè)計動畫

3.2用java設(shè)計動畫

3.3用VC++設(shè)計動畫3.1用VB設(shè)計動畫3.1.1vb實現(xiàn)簡單動畫的方法和實例:基本原理:實現(xiàn)動畫的基礎(chǔ)是圖像的顯示和使圖像快速、定時地移動或變化。利用Image和Timer控件能很方便地實現(xiàn)動畫。顯示:用LoadPicture函數(shù)將圖像文件裝入內(nèi)存,并將函數(shù)返回值賦予Image對象的Picture屬性,便能在Image對象中顯示圖像。運動控制:使用Timer控件可以實現(xiàn)定時控制。Timer對象的Interval屬性設(shè)置了定時間隔,即調(diào)用Timer事件過程的時間間隔。在Timer事件過程中處理控制Image對象的移動或變化,便能實現(xiàn)動畫。Timer對象的Interval值決定了動畫的變化或移動速度。使圖像移動或變化的基本方法:無位移動畫:是指動畫對象不移動,但圖像不斷變化。實現(xiàn)無位移動畫的方法是,設(shè)置好Image和Timer對象后,在Timer事件過程中調(diào)用LoadPicture函數(shù)裝載不同的圖像,并賦予Image對象的Picture屬性,使對象中顯示不同的圖像,即實現(xiàn)圖像變化。例:幻燈片。單幀位移動畫:是指同一幅圖像的位置不斷變化而形成的動畫,編制單幀位移動畫的方法是在Timer事件過程中調(diào)用Image對象的Move方法來移動圖像。其Left和Top屬性指示了Image對象的當(dāng)前左上角位置。例:水中游魚(不擺尾)、圖形動畫(簡單動畫、電影字幕模擬)多幀位移動畫:綜合了無位移動畫和單幀位移動畫的特點,如小鳥的飛翔,在小鳥位置的移動的同時,其翅膀也在扇動。實現(xiàn)多幀位移動畫需要在Timer事件過程中同時處理Image對象的圖像更替和位置移動。例:奔跑的獵豹??s放動畫:在Timer事件過程中修改Image對象的Width和Height屬性,便可實現(xiàn)縮放動畫。但如果要表現(xiàn)物體的同心縮放,則還應(yīng)同時還需移動Image對象。例:氣球的膨脹或縮小、文字縮放效果

示例演示:圓形動畫時鐘、煙花、雨景模擬、圖形動畫3.1用VB設(shè)計動畫3.1.2vb實現(xiàn)復(fù)雜動畫的方法和實例directX

介紹DirectX并不是一個單純的圖形API,它是由微軟公司開發(fā)的用途廣泛的API,由很多API組成的,可以分為四大部分,顯示部分、聲音部分、輸入部分和網(wǎng)絡(luò)部分。包含:DirectGraphics(Direct3D+DirectDraw)、DirectInput、DirectPlay、DirectSound等多個組件,它提供了一整套的多媒體接口方案。只是其在3D圖形方面的優(yōu)秀表現(xiàn),讓它的其它方面顯得暗淡無光顯示部分擔(dān)任圖形處理的關(guān)鍵DirectDraw(DDraw)主要負責(zé)2D圖像加速。它包括很多方面:我們播放mpg、DVD電影、看圖、玩小游戲等等都是用的DDraw,你可以把它理解成所有劃線的部分都是用的DDraw。

Direct3D(D3D),主要負責(zé)3D效果的顯示,比如CS中的場景和人物、FIFA中的人物等等,都是使用了DirectX的Direct3D。3.1用VB設(shè)計動畫VBdirectX

結(jié)合實現(xiàn)復(fù)雜動畫效果打開VB,點擊菜單中的Project|References項,在ObjectLibrary列表中會有一項:DirectX7.0ForVisualBasicTypeLibrary列表項,這個就是DirectX7.0VB類庫,選中該項,再選“ok”按鈕,就可以將庫加入工程文件中。示例:獲得系統(tǒng)中的DirectDraw和DirectSound驅(qū)動3.1用VB設(shè)計動畫3.2用java設(shè)計動畫3.2.1基本原理及實現(xiàn)技術(shù)原理:在屏幕上畫出一系列的幀來造成運動的感覺。Java動畫的實現(xiàn):Java不僅提供了對圖形、圖像的支持,還允許用戶實現(xiàn)連續(xù)的圖像播放,即動畫技術(shù)。首先用Java.awt

包中的Graphics類的drawImage()方法在屏幕上畫出圖像,然后通過定義一個線程,讓該線程睡眠一段時間,然后再切換成另外一幅圖像;如此循環(huán),在屏幕上畫出一系列的幀來造成運動的感覺,從而達到顯示動畫的目的。為了每秒鐘多次更新屏幕,必須創(chuàng)建一個線程來實現(xiàn)動畫的循環(huán),這個循環(huán)要跟蹤當(dāng)前幀并響應(yīng)周期性的屏幕更新要求;實現(xiàn)線程的方法有兩種,可以創(chuàng)建一個類Thread的派生類,或附和在一個Runnable

的界面上。屏幕閃爍現(xiàn)象的處理:原因:一是繪制每一幀花費的時間太長(因為重繪時要求的計算量大);二是在每次調(diào)用Paint()前,Java會用背景顏色重畫整個畫面,當(dāng)在進行下一幀的計算時,用戶看到的是背景。解決辦法:重載update()或使用雙緩沖。重載update():當(dāng)AWT接收到一個applet的重繪請求時,它就調(diào)用applet的update(),默認地,update()清除applet的背景,然后調(diào)用paint()。重載update(),將以前在paint()中的繪圖代碼包含在update()中,從而避免每次重繪時將整個區(qū)域清除。所以要消除畫面閃爍就一定要改寫update()方法,使該方法不會清除整個畫面,只是消除必要的部分。使用雙緩沖技術(shù):它在許多動畫Applet中被使用。其主要原理是創(chuàng)建一個后臺圖像,將需要繪制的一幀畫入圖像,然后調(diào)用DrawImage()將整個圖像一次畫到屏幕上去;好處是大部分繪制是離屏的,將離屏圖像一次繪至屏幕上比直接在屏幕上繪制要有效得多,大大提高做圖的性能。雙緩沖可以使動畫平滑,但有一個缺點,要分配一張后臺圖像,如果圖像相當(dāng)大,這將需要很大一塊內(nèi)存;當(dāng)你使用雙緩沖技術(shù)時,應(yīng)重載update()。3.2用java設(shè)計動畫3.2用java設(shè)計動畫3.2.2java實現(xiàn)動畫的方法和實例二維動畫:圖片循環(huán)播放、多線程方法

三維動畫:Java3d包的應(yīng)用java實現(xiàn)二維動畫的方法和實例在Java中實現(xiàn)動畫有很多種辦法,但它們實現(xiàn)的基本原理是一樣的,即在屏幕上畫出一系列的幀來造成運動的感覺。Java不僅提供了對圖形、圖像的支持,還允許用戶實現(xiàn)連續(xù)的圖像播放,即動畫技術(shù)。Java動畫的實現(xiàn),首先用Java.awt

包中的Graphics類的drawImage()方法在屏幕上畫出圖像,然后通過定義一個線程,讓該線程睡眠一段時間,然后再切換成另外一幅圖像;如此循環(huán),在屏幕上畫出一系列的幀來造成運動的感覺,從而達到顯示動畫的目的。為了每秒鐘多次更新屏幕,必須創(chuàng)建一個線程來實現(xiàn)動畫的循環(huán),這個循環(huán)要跟蹤當(dāng)前幀并響應(yīng)周期性的屏幕更新要求;實現(xiàn)線程的方法有兩種,可以創(chuàng)建一個類Thread的派生類,或附和在一個Runnable

的界面上。例子:圖片循環(huán)播放3.2用java設(shè)計動畫用Java3d包實現(xiàn)三維動畫Java3D用其自己定義的場景圖和觀察模式等技術(shù)構(gòu)造了3D的上層結(jié)構(gòu),實現(xiàn)了在Java平臺使用三維技術(shù)。Java3DAPI是Sun定義的用于實現(xiàn)3D顯示的接口。3D技術(shù)是底層的顯示技術(shù),Java3D提供了基于Java的上層接口。Java3D把OpenGL和DirectX這些底層技術(shù)包裝在Java接口中。建立在JAVA2基礎(chǔ)之上。它實現(xiàn)了以下三維顯示能夠用到的功能:生成簡單或復(fù)雜的形體(也可以調(diào)用現(xiàn)有的三維形體)使形體具有顏色、透明效果、貼圖。在三維環(huán)境中生成燈光、移動燈光。具有行為的處理判斷能力(鍵盤、鼠標(biāo)、定時等)。生成霧、背景、聲音。使形體變形、移動、生成三維動畫。編寫非常復(fù)雜的應(yīng)用程序,用于各種領(lǐng)域如VR(虛擬現(xiàn)實)J2SE在其標(biāo)準(zhǔn)開發(fā)包中并不提供Java3D的API,Java3D是一個獨立的可選組件,可以單獨下載。例子:粒子系統(tǒng)3.2用java設(shè)計動畫3.3用VC++設(shè)計動畫3.3.1用VC++設(shè)計動畫原理:關(guān)鍵幀動畫(二維):顯示:圖形模式下,圖形函數(shù)運動:循環(huán)控制(顯示—擦除—顯示)生成動畫(三維):算法openGL3.3用VC++設(shè)計動畫3.3.2VC++設(shè)計二維動畫結(jié)合一個圖形方式的時鐘程序來說明VC++中如何使用圖形程序設(shè)計和動畫技術(shù)。程序運行后以圖形方式顯示時鐘,秒針一秒一秒地轉(zhuǎn)動。該程序用到了結(jié)構(gòu)型變量的指針、圖形程序設(shè)計以及動畫技術(shù)等一些知識。3.3用VC++設(shè)計動畫圖形方式的時鐘程序:

#include<time.h>//時間處理函數(shù)原型及數(shù)據(jù)結(jié)構(gòu)

#include<stdio.h>//標(biāo)準(zhǔn)輸入/輸出函數(shù)原型及數(shù)據(jù)結(jié)構(gòu)

#include<dos.h>//dos所用數(shù)據(jù)結(jié)構(gòu)和函數(shù)原型

#include<conio.h>//控制臺輸入/輸出函數(shù)原型及數(shù)據(jù)結(jié)構(gòu)

#include<math.h>//數(shù)學(xué)函數(shù)原型

#include<graphics.h>//圖形處理函數(shù)原型及數(shù)據(jù)結(jié)構(gòu)

#definePI3.14159

time-tltime;

//類型time-t即long

structtm*pt;//pt為指向時間結(jié)構(gòu)tm的指針

voidshowTime(void);//函數(shù)原型聲明

3.3用VC++設(shè)計動畫voidmain(void)

{(

showTime();//調(diào)用圖形方式顯示函數(shù)

}"voidshowtime(void)//以圖形方式顯示運轉(zhuǎn)的時鐘!

{

int

Rs=100;//秒針長度

int

Rc=130;//時鐘外圓圈半徑/

doublealpha=2*PI/60.0;//秒針1秒和分針1分鐘所旋轉(zhuǎn)的弧度數(shù)

int

x,y;//時鐘圓心坐標(biāo)

int

xSecond,ySecond;//秒針針尖位置坐標(biāo)

intdriver=DETECT,mode;//定義驅(qū)動器和模式變量并指示自動檢測/

3.3用VC++設(shè)計動畫//將顯示器初始化為指定的圖像模式:

initgraph(&driver,&mode,"c:\\BC31\\BGI\\");

x=getmaxx()/2;y=getmaxy()/2;//計算時鐘圓心坐標(biāo)

cleardevice();//圖像屏幕清屏

setbkcolor(WHITE);//配置背景顏色

setlinestyle(0,1,3);//配置畫線風(fēng)格:實線,3像素寬

setcolor(LIGHTBLUE);//配置時鐘外圓圓圈的顏色

circle(x,y,Rc);//配置時鐘外圓圓圈

while(!kbhit())//按下任一鍵則退出循環(huán)

{

time(<ime);//讀取系統(tǒng)時間

pt=localtime(<ime);//轉(zhuǎn)換為結(jié)構(gòu)型并返回其指針

xSecond=x+Rs*cos(pt->tm-sec*alpha-PI/2);//計算秒針針尖的位置坐標(biāo)

ySecond=y+Rs*sin(pt->tm-sec*alpha-PI/2);

setcolor(LIGHTRED);//配置秒針的顏色

line(x,y,xSecond,ySecond);//畫秒針

delay(50);//延時50毫秒

setcolor(BLACK);//畫線顏色配置為背景顏色

line(x,y,xSecond,ySecond);//擦除秒針

}

closegraph();//關(guān)閉圖像模式

}3.3用VC++設(shè)計動畫該程序中用到了系統(tǒng)定義的存儲時間數(shù)據(jù)的結(jié)構(gòu)型structtm,它在頭文件time.h中定義:

structtm

inttm-sec;/*Seconds*/

inttm-min;/*Minutes

inttm-hour;/*Hour(0--23

inttm-mday;/*Dayofmonth(1--31)*/

inttm-mon;/*Month(0--11)*/

inttm-year;/*Year(calendaryearminus1900)*/

inttm-wday;/*weekday(0--6;Sunday=0)*/

inttm-yday;/*Dayofyear(0--365)*/

inttm-isdst;/*0ifdaylightsavingstimeisnotineffect)*/

};3.3用VC++設(shè)計動畫該程序用系統(tǒng)提供的time()函數(shù)讀取系統(tǒng)時間,并將其存入長整型變量ltime中:time(<ime)。用系統(tǒng)提供的localtime()函數(shù)將長整型的時間值轉(zhuǎn)換為tm結(jié)構(gòu)型變量的值,并返回指向該結(jié)構(gòu)型變量的指針,該指針被賦值給指針變量pt=loclatime(<ime)。這樣便于通過pt得到時間tm結(jié)構(gòu)型變量中的時、分、秒的值,即pt->tm-hour、pt->tm-min、pt->tm-sec。在計算秒針針尖的位置時用了pt->tm-sec。time()函數(shù)和localtime()函數(shù)的原型在頭文件time.h中聲明,因此必須用#include指令將文件time.h包含到本程序中來。3.3用VC++設(shè)計動畫3.3.2VC++設(shè)計三維動畫OpenGL(OpenGraphicsLanguage)簡介1992年由SGI公司推出,現(xiàn)已經(jīng)成為一個開放的、獨立于應(yīng)用平臺的、工業(yè)標(biāo)準(zhǔn)的計算機三維圖形軟件開發(fā)接口。OpenGL是個與硬件無關(guān)的軟件接口,可以在不同的平臺如Windows

95、WindowsNT、Unix、Linux、MacOS、OS/2之間進行移植。。OpenGL是底層的圖形庫,沒有提供幾何實體圖元,不能直接用以描述場景。但是,通過一些轉(zhuǎn)換程序,可以很方便地將AutoCAD、3DS/3DSMAX等3D圖形設(shè)計軟件制作的DXF和3DS模型文件轉(zhuǎn)換成OpenGL的頂點數(shù)組。微軟雖然有自己的三維編程開發(fā)工具DirectX(包含圖形,聲音,輸入,網(wǎng)絡(luò)等模塊),但它也提供OpenGL(圖形函數(shù)庫)圖形標(biāo)準(zhǔn),所以O(shè)penGL可以與VC++緊密接合,實現(xiàn)有關(guān)計算和圖形算法。3.3用VC++設(shè)計動畫OpenGL提供的功能:

1、建模:OpenGL圖形庫除了提供基本的點、線、多邊形的繪制函數(shù)外,還提供了復(fù)雜的三維物體,如球、錐、多面體、茶壺以及復(fù)雜曲線和曲面(例如Bezier、Nurbs等曲線或曲面)的繪制函數(shù)。

2、變換:OpenGL圖形庫的變換包括基本變換和投影變換?;咀儞Q有平移、旋轉(zhuǎn)、變比、鏡像四種變換,投影變換有平行投影(又稱正射投影)和透視投影兩種變換。

3、顏色模式設(shè)置:OpenGL顏色模式有兩種,即RGBA模式和顏色索引(ColorIndex)。

4、光照和材質(zhì)設(shè)置:OpenGL光有輻射光(EmittedLight)、環(huán)境光(AmbientLight)、漫反射光(DiffuseLight)和鏡面光(SpecularLight)。材質(zhì)是用光反射率來表示。客觀世界中的物體最終反映到人眼的顏色是光的紅綠藍分量與材質(zhì)紅綠藍分量的反射率相乘后形成的顏色。

3.3用VC++設(shè)計動畫

5、紋理映射(TextureMapping):利用OpenGL紋理映射功能可以十分逼真地表達物體表面細節(jié)。

6、位圖顯示和圖象增強:OpenGL的圖象功能除了基本的拷貝和像素讀寫外,還提供融合(Blending)、反走樣(Antialiasing)和霧(fog)的特殊圖象效果處理。以上三條可是被仿真物更具真實感,增強圖形顯示的效果。

7、雙緩存動畫(DoubleBuffering):OpenGL使用了前臺緩存和后臺緩存交替顯示場景(Scene)技術(shù),簡而言之,后臺緩存計算場景、生成畫面,前臺緩存顯示后臺緩存已畫好的畫面。

8、特殊效果:利用OpenGL還能實現(xiàn)深度暗示(DepthCue)、運動模糊(MotionBlur)等特殊效果。運動模糊的繪圖方式(motion-blured),模擬物體運動時人眼觀察所感覺的動感現(xiàn)象。深度域效果(depth-of-effects),類似于照相機鏡頭效果,模型在聚焦點處清晰,反之則模糊。

這些三維物體繪圖和特殊效果處理方式,說明OpenGL能夠模擬比較復(fù)雜的三維物體或自然景觀3.3用VC++設(shè)計動畫OpenGL的函數(shù)庫:采用C語言風(fēng)格,提供大量的函數(shù)來進行圖形方面的處理,一般編程使用的函數(shù)庫包括:OpenGL圖形庫-----函數(shù)以gl開頭,可以實現(xiàn)比較簡單的繪制功能,核心函數(shù)共115個。這些函數(shù)可以運行在現(xiàn)在任何主流操作系統(tǒng)中。OpenGL實用庫-----函數(shù)以glu開頭,其函數(shù)功能更高級一些,如繪制復(fù)雜的曲線曲面、高級坐標(biāo)變換、多邊形分割等,共有43個。這些函數(shù)可以運行在現(xiàn)在任何主流操作系統(tǒng)中。OpenGL輔助庫-----函數(shù)以aux開頭,它們是一些特殊的函數(shù),包括簡單的窗口管理、輸入事件處理、某些復(fù)雜三維物體繪制等函數(shù),共有31個。它只能在Win32平臺下運行。OpenGL實用工具開發(fā)庫----函數(shù)以glut開頭,它們提供更為復(fù)雜的繪制功能,此函數(shù)由glut.dll來負責(zé)解釋執(zhí)行。Windows專用函數(shù)庫-----以wgl開頭,負責(zé)OpenGL與Windows窗口系統(tǒng)的連接,共有6個。Win32函數(shù)------無專用前綴,實際上為API函數(shù),共5個,用來處理比如象素格式的選擇及雙緩沖等功能。3.3用VC++設(shè)計動畫OpenGL提供的函數(shù)一般是以客戶機/服務(wù)器的模式來運行的,即執(zhí)行繪制圖形功能的應(yīng)用程序作為客戶機,而OpenGL函數(shù)庫(實際上是一些動態(tài)鏈接庫,比如opengl32.dll,glu.dll等)作為服務(wù)器,當(dāng)應(yīng)用程序發(fā)出繪制請求時,服務(wù)器負責(zé)對這些繪制請求進行解釋,然后把這些處理過的請求發(fā)送給圖形顯示硬件,這樣就實現(xiàn)了繪圖的目的。另外由于它這種特有的運行機制也實現(xiàn)了網(wǎng)絡(luò)的透明性,即當(dāng)應(yīng)用程序與核心圖形庫不在同一臺機器上時,其程序的代碼完全跟它們在同一臺機器上的一樣,節(jié)約了通訊開銷

3.3用VC++設(shè)計動畫OpenGL的基本工作流程如下圖:

3.3用VC++設(shè)計動畫在OpenGL中進行主要的圖形操作直至在計算機屏幕上渲染繪制出三維圖形景觀的基本步驟:

1)根據(jù)基本圖形單元建立景物模型,并且對所建立的模型進行數(shù)學(xué)描述(OpenGL中把:點、線、多邊形、圖像和位圖都作為基本圖形單元)。

2)把景物模型放在三維空間中的合適的位置,并且設(shè)置視點(viewpoint)以觀察所感興趣的景觀。

3)計算模型中所有物體的色彩,其中的色彩根據(jù)應(yīng)用要求來確定,同時確定光照條件、紋理粘貼方式等。

4)把景物模型的數(shù)學(xué)描述及其色彩信息轉(zhuǎn)換至計算機屏幕上的象素,這個過程也就是光柵化(rasterization)。

在這些步驟的執(zhí)行過程中,OpenGL可能執(zhí)行其他的一些操作,例如自動消隱處理等。另外,景物光柵化之后被送入幀緩沖器之前還可以根據(jù)需要對像素數(shù)據(jù)進行操作。3.3用VC++設(shè)計動畫如何使用OpenGL圖形庫函數(shù)來開發(fā)應(yīng)用程序當(dāng)使用GDI(圖形設(shè)備接口)開發(fā)應(yīng)用程序時,先需獲得一個DeviceContext(設(shè)備描述表,簡稱DC),然后才能在這個DC下完成繪圖工作,從Windows內(nèi)部運行機制來分析,DC應(yīng)該理解為狀態(tài)保持器,就是它可以而且必須保存當(dāng)前系統(tǒng)的狀態(tài),這些狀態(tài)包括:當(dāng)前的畫筆、刷子等GDI

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論