旋轉矩陣(Rotation Matrix)的推導及其應用

向量的平移,比較簡單。html

「向量平移」的圖片搜索結果

 

縮放也較爲簡單spa

「向量平移」的圖片搜索結果

 

矩陣如何進行計算呢?以前的文章中有簡介一種方法,把行旋轉一下,而後與右側對應相乘。在谷歌圖片搜索旋轉矩陣時,看到這張動圖,以爲表述的很清晰了。視頻

「rotation matrix animation」的圖片搜索結果

 

 

稍微複雜一點的是旋轉,若是隻是二維也很簡單(由於很直觀),但由於是三維的,有xyz三個軸,先推導二維的再延伸到三維。htm

YouTube上有很好的推導過程,視頻連接地址(需穿.牆) https://www.youtube.com/watch?v=8XRvpDhTJpwblog

 

有點P(Xa,Ya),當座標由 x –> y 旋轉 θ 度後,求該點在新座標軸的座標是多少圖片

image

image

image

image

因此對於二維旋轉來說,旋轉矩陣就是ip

image

三維旋轉,須要先搞清楚正、負方向(使用的是右手法則,在二維平面增長一維z,它的正方向朝向屏幕外)。ci

 

繞x軸進行旋轉(在yz平面順時針旋轉)get

XAxis

[1 0 0; 0 cosalpha sinalpha; 0 -sinalpha cosalpha]

 

繞y軸進行旋轉(在zx平面順時針旋轉)animation

YAxis

[cosbeta 0 -sinbeta; 0 1 0; sinbeta 0 cosbeta]

 

繞z軸進行旋轉(在xy平面順時針旋轉)

ZAxis

[cosgamma singamma 0; -singamma cosgamma 0; 0 0 1]

 

— 圖片來源http://mathworld.wolfram.com/RotationMatrix.html

參考:https://zh.wikipedia.org/wiki/旋轉矩陣

 

 

瞭解這些有什麼用處呢?以前有講到渲染被分爲三個階段:應用 –> 幾何 –> 柵格化,其中幾何階段作了大量的變換工做。

模型空間 –>( 模型矩陣) –> 世界空間 –> (視圖矩陣) –> 觀察空間(攝像機,右手座標系,其他均採用左手) –> (投影矩陣) –> 裁剪空間 –> 屏幕空間,每一次變換都對應着相應的矩陣。

8c3cf1f1d289e81671ac76b6aa5b9aa6_thumb

 

190824532

而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)的時候纔不至於懞圈 微笑

相關文章
相關標籤/搜索