看板 Flash 關於我們 聯絡資訊
昨天第一次放假從國軍online暫時登出... 推文中的方法是速解法沒錯 但是如果還是對正確的計算方式有興趣 那可以參考看看Quaternion和Matrix3D的概念 rotationX, Y, Z三者其實只是為了開發者方便而設計的三個setter methods 設定他們的值之後其實最後還是去修改背後的Matrix3D 最後畫面上的呈現還是以這個Matrix3D為主 各第三方API幾乎都有這三個setter methods 然後也有各自的Matrix3D換算方式 例如Stardust的Matrix3D從rotationX, Y, Z的換算方式 就是先算rotationZ、再算rotationY、最後是rotationX 實際式子可以參考Stardust的Matrix3D.set() method http://bit.ly/bqgnt0 但是用三軸旋轉角度來表示3D空間的旋轉變形還是不夠 要指定任意軸的旋轉以及兩角度之間的內插很難計算 例如從(10, 20, 30)轉到(40, 30, 20) 絕不是直接把rotationX從10漸變到40, rotationY從20到30,rotationZ從30到20這麼容易 直接這樣做的結果看起來會是很奇怪的旋轉 這個時候就會需要用到Quaternion的概念 Quaternion是一種進階的數學運算方式 顧名思義,Quaternion的字根"Quat"有"四"之意 Quatenion中文翻譯為"四元數",你可以把他看成是一個四個數字一組的向量 可以大致想成是"旋轉軸方向的三軸分量+旋轉角度" Quaterion有一個叫做SLERP (Spherical Linear Interpolation '球型內插法')的運算 可以準確的計算出兩個任意旋轉角度間的內插角度 當然這計算的input和output都是Quaternion 還需要將Quaternion轉換成Matrix3D,才可以正確的把畫面呈現 另外,也有將任意角度轉軸和任意旋轉角度換算成Quaternion的公式 於是,原po的問題解法就變成 1) 任意轉軸 = Y軸 (0, 1, 0) 旋轉角度 = 23.5度 2) 從Quaternion轉換成Matrix3D 以Stardust的Quaternion class來寫,大致就是這樣 Quaterinon.buildFromAxisRotation(new Vec3D(0, 1, 0), 23.5).toMatrix() Stardust的Quaternion class請見 http://bit.ly/da2FJi 你可以自行比較看看rotationX, Y, Z轉換到Matrix3D 跟Quaterion轉換到Matrix3D 所需要的乘法和三角函數運算,總數差不多,所以不用擔心效能差距問題 但是如果要考慮到角度相加運算的話,那Quaternion就大幅勝過Matrix3D了 -- CJ Cat = Croa'J Cat = Cockroach Cat = 西街凱特 = 蜚蠊貓 = 蟑螂貓 Blog http://cjcat.blogspot.com Gallery http://cjcat2266.deviantart.com ptt2 Board CJWorkshop - 阿多比閃光(Adobe Flash)研討區 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.161.216 ※ 編輯: cjcat2266 來自: 114.45.161.216 (08/21 11:14)
zswolf:大推!!!! 08/21 12:37
etrexetrex:推 08/21 13:09
kyzusmugoe:好深奧= =大推一下~! 08/21 15:09
interboard:看到高手只能推了 雖然我都看不懂= = 08/21 15:51
sextitanic:難得放假還熱心教學,大大推啊 08/21 15:59
uice:推~ 08/21 22:58
dontpkme:推 08/22 20:29
FLJX:CJ是我們的神! 08/24 18:58
dsmwang:雖然看不懂,還是推XD 08/25 01:06