向量的平移,比較簡單。html
縮放也較爲簡單spa
矩陣如何進行計算呢?以前的文章中有簡介一種方法,把行旋轉一下,而後與右側對應相乘。在谷歌圖片搜索旋轉矩陣時,看到這張動圖,以爲表述的很清晰了。視頻
稍微複雜一點的是旋轉,若是隻是二維也很簡單(由於很直觀),但由於是三維的,有xyz三個軸,先推導二維的再延伸到三維。htm
YouTube上有很好的推導過程,視頻連接地址(需穿.牆) https://www.youtube.com/watch?v=8XRvpDhTJpwblog
有點P(Xa,Ya),當座標由 x –> y 旋轉 θ 度後,求該點在新座標軸的座標是多少圖片
因此對於二維旋轉來說,旋轉矩陣就是ip
三維旋轉,須要先搞清楚正、負方向(使用的是右手法則,在二維平面增長一維z,它的正方向朝向屏幕外)。ci
繞x軸進行旋轉(在yz平面順時針旋轉)get
繞y軸進行旋轉(在zx平面順時針旋轉)animation
繞z軸進行旋轉(在xy平面順時針旋轉)
— 圖片來源:http://mathworld.wolfram.com/RotationMatrix.html
參考:https://zh.wikipedia.org/wiki/旋轉矩陣
瞭解這些有什麼用處呢?以前有講到渲染被分爲三個階段:應用 –> 幾何 –> 柵格化,其中幾何階段作了大量的變換工做。
模型空間 –>( 模型矩陣) –> 世界空間 –> (視圖矩陣) –> 觀察空間(攝像機,右手座標系,其他均採用左手) –> (投影矩陣) –> 裁剪空間 –> 屏幕空間,每一次變換都對應着相應的矩陣。
而Unity中的 UNITY_MATRIX_MVP 矩陣表示的是從模型到裁剪座標的矩陣變換,Model Matrix ● View Matrix ● Projection Matrix。在Unity2017中使用 UnityObjectToClipPos 進行了替換,MVP也便是 模型(M)、視圖(V)、透視(P)三個單詞的首字母簡寫。
瞭解上面這些,才更容易理解Unity內置的變換矩陣
變量名 |
描述 |
UNITY_MATRIX_MVP | 當前的模型觀察投影矩陣,用於將頂點/方向矢量從模型空間變換到裁剪空間 |
UNITY_MATRIX_MV | 當前的模型觀察矩陣,用於將頂點/方向矢量從模型空間變換到觀察空間 |
UNITY_MATRIX_V | 當前的觀察矩陣,用於將頂點/方向矢量從世界空間變換到觀察空間 |
UNITY_MATRIX_P | 當前的投影矩陣,用於將頂點/方向矢量從觀察空間變換到裁剪空間 |
UNITY_MATRIX_VP | 當前的觀察投影矩陣,用於將頂點/方向矢量從世界空間變換到裁剪空間 |
UNITY_MATRIX_T_MV | UNITY_MATRIX_MV的轉置矩陣 |
UNITY_MATRIX_IT_MV | UNITY_MATRIX_MV人逆轉置矩陣,用於將法線從模型空間變換到觀察空間,也能夠用於獲得UNITY_MATRIX_MV的逆矩陣 |
_Object2World | 當前的模型矩陣,用於將頂點/方向矢量從模型空間變換到世界空間(依上面規則,這個其實至關於UNITY_MATRIX_M 即模型空間 –> 世界空間) |
_World2Object | _Object2World的逆矩陣,用於將頂點/方向矢量從世界空間變換到模型空間 |
對照下面這張圖,更容易理解一些。
上面這些是基礎,只有掌握這些以後,再配置切線、法線、光照模型,在寫頂點着色器(Vertex Shader)的時候纔不至於懞圈