實時三維動畫內核分析

好吧,今天,讓未來帶領大家進入“真三維的 Flash 世界”——其實只是很簡單的“三維”了。
  先看看這個:
  三維動畫可能對大多數人來說都是可望而不可及的吧?是不是總覺得自己不可能製作出真正的三維的東西來呢?錯!當你瞭解了三維的基礎知識以後,這些想法就不存在了!而且您會很快就掌握它的製作方法!不相信?舉個例子,我一直沒有研究過三維基礎知識,當我找到一本書以後,馬上就編寫出我的第一個真三維的動畫,僅僅半小時!好了,有信心了吧?開始!
  1)在平面上畫線
  在 Flash 中,所謂“畫”線,其實就是將一個線型的 MovieClip 改變角度和長度,並且把它放在正確的位置上。
  我現在來說明怎樣“畫”一條線段。
  首先,看我們的 MovieClip,它是這個樣子的:
[img]/uploads/allimg/080329/1050440.gif[/img]
  下面,我們該開始“畫”的過程了。從 (x1,y1) 到 (x2,y2)。
  首先,看下圖,我們可以複習一下上學時學到的東西,瞭解一下怎樣求兩點之間的距離。
[img]/uploads/allimg/080329/1050441.gif[/img]
  是了,兩點之間的距離應該是dx= x2 - x1;
dy= y2 - y1;
line_length = Math.sqrt(dx*dx+dy*dy);
  然後,再看看怎樣求旋轉的角度。我們從三角函數的知識知道:正切 tan(ANGLE)=dy:dx,那麼,好,我們已經知道了 dx 和 dy,就可以得出 tan(ANGLE) 的值,然後用 Flash 5 提供的反正切函數 atan 就可以計算出 ANGLE。
  不過,要注意的是,取得的 ANGLE 是以弧度計算的,我們還需要把它轉換成角度。爲什麼要轉換成角度呢?因爲我們要旋轉 MovieClip,而這個旋轉的角度不是弧度,而是標準的角度。取得角度以後,如果是鈍角,還要做一下運算。具體程序如下: angle = Math.atan(dy/dx);
angle = angle*180/Math.PI;
if (dx
  取得長度、角度以後,就可以“畫”線了,我們先把線的頂端設置到 (x1,y1),然後通過改變長度和角度使得線的尾部到達 (x2,y2)。setProperty ("line", _x, x1);
setProperty ("line", _y, y1);
setProperty ("line", _rotation, angle);
setProperty ("line", _xscale, line_length);
  好了,“畫”線這個最基本的環節我們完成了!
  2)空間上的點和線
  平面上的點我們會用 (x,y) 來表示,而當這個概念延伸到三維上以後,空間上的點就應該定義爲 (x,y,z) ,其中,xy 的意義和傳統上是一樣的,而這個z則是代表垂直於平面上的“深度”,因此,在空間上的點 (10,10,100) 會表現得比 (10,10,10) 更“深”一些。
  那麼,怎樣來在二維平面上來表現空間上的點的位置呢?這裏有一個經典的算法:x=(x/(z+d))*d;
y=(y/(z+d))*d;
本文轉自:http://www.5uflash.com/flashjiaocheng/Flashdonghuajiaocheng/1116.html
發佈了14 篇原創文章 · 獲贊 1 · 訪問量 1927
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章