三維變換矩陣推導筆記


  還記得兩年前校招面試被問到了這個並不復雜的問題,那時候我居然傻傻地沒有推倒出來,現在想想真是菜的扣腳!!

  這么基礎的知識還是要完全搞清楚,於是我決定找個時間專門把常用的三維變換矩陣的推導總結一番

  1.二維的旋轉

  假設平面上存在一點(用極坐標表示)(ρ,θ),那么他在直角坐標中可以表示為x = ρ * cosθ, y = ρ * sinθ。

  現在把這個點逆時針旋轉α度,其極坐標為(ρ, θ + α),直角坐標為x’ = ρ * cos(θ + α), y’ = ρ * sinθ (θ + α) 

  展開可推得x’ = x * (cosα - sinα) , y’ = y * (sinα + cosα)

  

  2.有了二維的基礎,我們就可以表示三維里繞坐標軸的旋轉了

  比如繞Z軸的旋轉:

  

  3.然而表示了旋轉並沒有大功告成,我們還需要平移、縮放

  兩個向量相加等於每個元素相加:(x1, y1, z1) + (x2, y2, z2) = (x1 + x2, y1+ y2, z1+z2)

  顯然3 * 3的矩陣式無法表示的,於是我們再增加一維,表示如下:

  

  游戲引擎層的矩陣大部分都是采用4 * 4矩陣,於是我們統一把旋轉也用4維表示

  繞X軸旋轉:

  

  繞Y軸旋轉:

  

  繞Z軸旋轉:

  

  有了這幾個基本的元素,我們已經可以表示任何旋轉啦,比如先向X軸轉一下,再向Y軸轉一下,兩個矩陣相乘就得到了一個不是繞坐標軸的旋轉矩陣

  4.縮放

  這個就更簡單啦,假設x軸的縮放因子為sx, y軸的縮放因子為sy,z軸的縮放因子為sz,那么縮放矩陣可表示為:

  

  至此,最基本的變換矩陣都推倒完畢了,剩下的只要把他們相互組合,就可以使用矩陣表示一個點的變換了。  


免責聲明!

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



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