XNA-3D矩陣運算
這裡會解釋一下基本的矩陣運算的原理,還有程式為我們所提供的函數,方便我們在3D遊戲程式中較容易使用。
矩陣運算會使用到四維的矩陣來運算,除了x,y,z座標外,還加入了一個齊次座標,(x,y,z,w)其中的w代表著座標軸遠近的參數,通常內定預設值是1.0,要轉換成3D位置空間的3維座標就會變成(x/w,y/w,z/w,1.0),有時候也會看到(x,y,z,1/d),d就代表是距離的意思。
這個齊次座標,最主要就是要把一個空間中的物件很容易的改變它的位置、旋轉它或是把它拉近拉遠,這些都可以藉由四維的矩陣來完成,故通常3D中都會加入這個齊次座標。
要顯示3D物件必須將3個矩陣相乘才能夠顯示在你要的位置上,通常是由縮放矩陣、旋轉矩陣、位移矩陣這三個矩陣所組成的。
縮放位移矩陣:
遊戲中物件通常只會繞Y軸旋轉的旋轉矩陣:
舉例:
縮放矩陣(S) = | |
旋轉矩陣(R) = | |
位移矩陣(T) = |
遊戲世界矩陣(World) = S * R * T
這樣代表著要將3D物件放在遊戲世界延著XYZ方向各放大5、4、3倍,然後再繞Y軸旋轉90度,最後再把物件放到離原點的X軸方向50個單位、Y軸方向的20個單位、Z軸方向30個單位的地方。
以上是矩陣的運算,以下就是在程式方面XNA提供給我們的矩陣運算的函數,不需要再經過相當複雜的運算就可以達到想要的目的。
Vector3是在Mircosoft.Xna.Framework下的類別,可以代表空間中的一個3維的向量,在它之下有幾個常用的成員變數。
- Vector3.Zero=>Vector3(0,0,0)
- Vector3.Up=>Vector3(0,1,0)
Matrix是在Mircosoft.Xna.Framework下的類別,而它底下提供了一些常用到的矩陣函數。
- Matrix.CreateScale(X軸,Y軸,Z軸) (放大矩陣)
- Matrix.CreateRotationX、Y、Z(旋轉多少弳度) (旋轉)
- Matrix.CreateTranslation(X軸,Y軸,Z軸) (位移)
上述三個常用的函數就是前面介紹的矩陣運算用來達成常會用到的函數。