關於Stage3D中Matrix3D

一,Matrix3D表示的矩陣是按行表示的(某一軸的變換是按行表示的 )

1. 正常情況下矩陣按列表示,如下:

scaleX        0              0       0
0        scaleY              0       0
0               0       scaleZ       0
tx             tY             tZ      tW


此時,先進行A矩陣變換再進行B矩陣變換,表示如下:
總變換 = A * B


2. 仔細看Matrix3D的表示圖,它與一般矩陣的按列表示不同,它是按行表示的,如下圖:


 而按Matrix3D的表示方式,先進行A矩陣變換再進行B矩陣變換,則表示如下:
總變換 = 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 );
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章