Unity3D開發之Matrix4x4矩陣變換

在Unity開發中時常會用到Matrix4x4矩陣來變換場景中對象的位置、旋轉和縮放。可是不少人都不太理解這兒Matrix4x4變換矩陣。經過DX中的變換矩陣我來說一講在unity中這個變換矩陣是怎麼變換的。函數

在三維圖形程序中,咱們能夠用幾何變換來達到如下目的:orm

  • 表示一個對象相對於另外一個對象的位置。對象

  • 旋轉和安排對象的大小。blog

  •  

  • 改變視維、方向和透視方法。開發

  你可使用一個4×4的矩陣將任何點變換到另外一個點。下面的例子中,咱們用一個矩陣對點(x, y, z)進行變化,產生了一個新的點(x', y', z'):get

  對點(x, y, z)進行一下運算,會獲得一個新點(x', y', z'):it

  最經常使用的變換包括:平移(translation),旋轉(rotation)和縮放(scaling)。你能夠將這些變換合併起來,組成一個矩陣,同時進行幾種變換。io

矩陣以行列號的形式來描述。form

沿每一個座標軸同時進行縮放時(咱們稱爲統一縮放uniform scaling),矩陣以下所示:程序

 

下面的變化將一個點(x, y, z)平移到另外一個點(x', y', z'):

 

下面的變換將一個點(x, y, z)沿x-軸進行旋轉,獲得了一個新的點(x', y', z'):

 

  下面的變化沿y-軸進行旋轉:

  下面的變換沿z-軸進行旋轉:

  這裏要注意一點,希臘字母θ表明旋轉的角度,用弧度來表示。從旋轉軸向原點看,這個角度按順時針方向來度量。

 

咱們使用矩陣的一個最大好處就是能夠經過矩陣相乘來將幾個矩陣變換的效果合併起來。這就是說,當咱們對一個模型進行旋轉和平移時,再也不須要用到兩個矩陣。咱們能夠經過將旋轉矩陣與平移矩陣相乘來獲得一個合併的矩陣。這一過程就被稱爲矩陣級聯,能夠用下面的公式來表示:

  共識中,C指組合以後產生的新矩陣,M1Mn表示要組合在一塊兒的每個矩陣。通常狀況下,咱們指將兩或三個矩陣組合起來,但其實是沒有限制的。  Matrix4x4類中有一個Matrix4x4.operator * 輔助函數來進行矩陣級聯運算。  在進行矩陣級聯時,咱們應該注意級聯時的順序。上面公式 中反映的是一種從右到左的矩陣級聯規則。也就是說,咱們用來建立一個合併的矩陣的每一個矩陣的實際效果是從右到左依次出現的。下面咱們舉一個例子來講明這一 狀況。在這個例子中,咱們要經過世界變換矩陣來建立一個「飛碟」。咱們想要這個UFO沿中心(模型空間的y-軸)來旋轉,同時要在場景中平移。爲了達到這樣的效果,你能夠首先建立一個平移矩陣,而後用它和旋轉矩陣相乘,以下所示:W=Tw·Ry  公式中,Tw表示平移矩陣,Ry表示旋轉矩陣。  兩個矩陣相乘的順序是很重要的,與標量的相乘不一樣,矩陣相乘的順序是不能交換的。若是咱們將兩個矩陣的順序交換的話,獲得的結果就會是,先對飛碟進行平移,而後將它繞世界原點進行旋轉。  不管咱們建立什麼類型的矩陣,都要按照從右到左的順序,這樣才能達到咱們預期的結果。

相關文章
相關標籤/搜索