一,Matrix3D表示的矩陣是按行表示的(某一軸的變換是按行表示的 ) 1. 正常情況下矩陣按列表示,如下: scaleX 0 0 0 0 scaleY 0 0 0 0 scaleZ 0 tx tY tZ tW 此時,先進行A矩陣變換再進行B矩陣變換,表示如下: 總變換 = A * B 2. 仔細看Matrix3D的表示圖,它與一般矩陣的按列表示不同,它是按行表示的,如下圖: 總變換 = B * A 爲什麼這裏矩陣相乘是後置一個矩陣呢,因爲這樣運算後,才能保證與正常情況下矩陣運算結果一樣(運算的行列才能對應),隨便列2個矩陣試下就知道了。 所以就是爲什麼Matrix3D.append( )函數的表示如下: public function append(lhs:Matrix3D):void 在使用 append() 方法時,乘法運算將從左側開始,這意味着 lhs Matrix3D 對象位於乘法運算符的左側。 thisMatrix = lhs * thisMatrix; 二,Matrix3D實際存儲的是上圖的轉置矩陣。 Matrix3D對矩陣的表示與存儲是2種不同的方式,有什麼區別呢? 1. 表示的方式:決定了在實際運算時,是按後置矩陣運算的。 2. 存儲的方式:決定了數據的存儲順序,如果存儲與表示的順序不同,則在使用前要做相關的操作。 存儲的方式不一定非要跟表示的方式一樣,比如Matrix3D中存儲與表示是顛倒的,所以使用前要將存儲的結構轉置一下。這就是爲什麼在上傳常矩陣時最後一個參數要設爲true(上傳時先轉置). m_kContext3D.setProgramConstantsFromMatrix( Context3DProgramType.VERTEX, 0, m_matFinal, true ); |
關於Stage3D中Matrix3D
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.