定義
實時動畫也稱為算法動畫,它是採用各種
算法來實現運動物體的運動控制。在實時動畫中,計算機一邊計算一邊顯示就能產生動畫效果。實時動畫一般不包含大量的動畫數據,而是對有限的數據進行快速處理,並將結果隨時顯示出來。實時動畫的回響時間與許多因素有關,如計算機的
運算速度、軟硬體處理能力、景物的複雜程度、畫面的大小等。遊戲軟體以實時動畫居多。
在實時動畫中,一種最簡單的運動形式是對象的移動,它是指螢幕上一個局部圖像或對象在二維平面上沿著某一固定軌跡運動。運動的對象或物體本身在運動時的大小、形狀、色彩等效果是不變的。具有對象移動功能的軟體有許多,如
Authorware、
Flash等都具有這種功能,這種功能也被稱作多種數據媒體的綜合顯示。對於對象的移動相對簡單,容易實現,又無需生成動畫檔案,所以套用廣泛。但是,對於複雜的動畫效果,則需要使用二維幀動畫預先將數據處理和保存好,然後通過播放軟體進行動畫播放。
實時動畫是最靈活的動畫,但也是最慢的。由於在進行動畫的同時繪製每一副圖像,因此可以根據需要動態來改變下一副圖像內容,也就是最具有
互動性。實時動畫的互動特性使之成為三維環境中移動模擬的有利候選者,隨著模擬複雜性的增加,越來越多的代碼必須轉換成彙編語言以最佳化動畫性能。但是
C語言卻能達到非常傑出的動畫效果
原理
實時動畫一般使用兩個圖形頁,其中一個做顯示頁,另一個做作圖頁,用戶只能看到顯示頁的圖像。在作圖頁完成一幅圖像後,把該頁切換成顯示頁,把原顯示頁變成作圖頁,然後在新的作圖頁上繪製另一幅圖像,畫完後再與剛才的顯示頁切換,如此循環下去。真正的作圖過程總是在作圖頁上,所以用戶看到的總是上一次完成的圖像。
顯然,實時動畫的速度取決於圖像內容的複雜程度。對於一個複雜的物體,其動畫速度會慢一些。使用C時,一般實時動畫的速度為每秒兩
幀或更慢。
設定作圖頁的函式:
QuickC:_setactivepage(pagenum);
TurboC:_setactivepage(pagenum);
設定顯示頁的函式:
QuickC:_setvisualpage(pagenum);
TurboC:_setvisualpage(pagenum);
交替使用這兩組函式來切換作圖和顯示頁,就可以產生實時動畫。
分類
實時動畫是採用算法實現對物體的運動控制或模擬攝像機的運動控制,一般適合於三維情形,根據不同的算法可分為以下幾種:
運動學算法
動力學算法
從運動的動因出發,由力學方程以確定運動形式。
反向運動學算法
已知連結物末端的位置和狀態,反求運動方程以確定運動形式。
反向動力學算法
已知連結物末端的位置和狀態,反求動力學方程以確定運動形式。
隨機運動算法
在某些場合下加進運動控制的隨機因素。
改善技巧
儘管實時動畫永遠不會達到幀動畫那樣的速度,但良好的互動性使得它成為動畫設計的最佳選擇。在動畫的同時生成每一副圖像,可以很容易地使用鍵盤來改變進行動畫的模型的形狀、位置和其他特徵。改善實時動畫效果的四種技巧如下:
越簡單越好
儘量使圖像簡單。計算機生成圖像的時間越長,動畫的速度就越慢。在實時動畫中,模型的動作決定了圖形的可信程度,也就是說,繪製模型的細節並不太重要。重要的是動作。如果你注重圖形的細節,那么最好使用幀動畫或BITBLIT動畫。
使用背景緩衝區
如果需要複雜的背景,比如遠處的群山或城堡,你可以使用另一個隱藏頁,不妨稱之為背景緩衝區,把背景畫好後存貯在該頁中。動畫序列的每一幀圖像用下面的方法產生:先把背景緩衝區的內容拷貝到作圖頁中;然後在作圖頁上繪製圖像;最後切換顯示頁和作圖頁,這樣含有背景的圖像就被顯示到螢幕上了。
最佳化三維公式
正弦和
餘弦的計算是很費時間的。如果一個三維模型僅僅是在螢幕上來回移動(不旋轉),則可修改原來的三維公式,計算出一個模型的各種角度的正弦和餘弦值後,僅僅調用下面的位移公式來實現模型的移動:
沒有必要每次都重新計算控制旋轉的變數srl、crl等等。用上面的平移公式,一個模型可以迅速地前後左右移動。
使用線性模型
使用透明的線性模型可以大大提高動畫的速度,因為對模型進行消隱的程式是十分費時的。