圖形學變換矩陣的分解


最近有一個需求是已知一個變換矩陣,如何根據該矩陣獲取它的位移、旋轉和縮放參數?
這個問題當初書里沒直接講,但是可以通過已有的知識推導出來。
首先我們知道,圖形學中的變換一般有三種:縮放、旋轉和位移,它們均可以用4*4的方陣予以表達。
比如縮放矩陣的形式如下:
\(\LARGE \begin{bmatrix} sx & 0 & 0 & 0 \\ 0 & sy & 0 & 0 \\ 0 & 0 & sz & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}\)
位移矩陣的形式如下:
\(\LARGE \begin{bmatrix} 1 & 0 & 0 & tx \\ 0 & 1 & 0 & ty \\ 0 & 0 & 1 & tz \\ 0 & 0 & 0 & 1 \end{bmatrix}\)
旋轉矩陣則比較復雜,繞着uvw軸(兩兩正交且長度為1)轉θ的矩陣如下:

其實還有一種理解方法:在三維空間中對一個物體旋轉可以理解為有一個不同於世界坐標系的坐標系,將該坐標系下的某個點轉換到世界坐標系下。那么構建出的這個轉換矩陣就是:
\(\LARGE \begin{bmatrix} u_x & v_x & w_x \\ u_y & v_y & w_y \\ u_z & v_z & w_z \end{bmatrix}\)
該矩陣其實就是旋轉矩陣,其中u,v,w是這個坐標系的坐標軸。

我們又知道,在圖形學中,可以通過矩陣相乘的方式來將各種變換操作疊加,常見的就是SRT,也就是將縮放、旋轉、平移三個矩陣乘在一起組合為新矩陣,用以表達一個物體總的變換。
那么,假設我們已知一個SRT矩陣,又該如何分解出其中的S、R和T呢?
其實仔細想一下也是比較簡單的,首先平移的部分始終位於矩陣的最后一列,可直接取出:

接下來,該矩陣的3*3部分是SR矩陣相乘的結果,我們又該如何進一步提取呢?
回想一下,三維旋轉矩陣本身需要滿足正交矩陣的性質,也就是它的每一行和每一列長度均要為1,我們可以從這一點入手,計算出該矩陣SR部分每一行的長度,它就一定是x、y、z軸的縮放!
然后再將SR部分的每一行除以sx、sy、sz就可以得到R矩陣了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM