3D圖形學學習——旋轉矩陣以及Unity的應用


矩陣旋轉公式:

  繞z軸旋轉:

    Rz(θ) =    cosθ ,  sinθ ,  0

          - sinθ ,  cosθ , 0  

              0 ,  0    , 1 

 

推導過程:

AB線段旋轉θ度變幻到A‘B‘

 

 

 

 

 根據sinθ = 對邊/斜邊

  cosθ = 鄰邊/斜邊

 且由上圖可知:

A'坐標

|x| =1 * cosθ

|y| = 1 * sinθ 

由因為處於第一象限

所以xy的唯一值為 (cosθ,sinθ);

A' = (cosθ,sinθ,0);

 

B'坐標

|x| = 1 * sinθ

|y| = 1 * cosθ

因為處於第三象限

所以xy的唯一值為 - sinθ , cosθ

B' = (- sinθ , cosθ , 0)

 

因為是繞Z軸旋轉,所以物體Z軸不變。

可得矩陣

 Rz(θ) =              cosθ ,  sinθ ,  0

          - sinθ ,  cosθ , 0  

              0 ,  0    , 1 

 

注:這里一定要弄清楚Unity的左手坐標系,左手坐標系的Z軸正方向旋轉為逆時針。

判斷旋轉方向的方式:左手豎起大拇指,握拳方向即為正旋轉方向。大拇指的指向與3D坐標系3根手指的指向保持一樣。繞不同的軸,大拇指指向不同的方向,此時的握拳4根手指的方向就是Unity里面的正方向。

 

矩陣公式推導出來后,可以去Unity里面寫個shader驗證一下。

///某個點繞Z軸旋轉
            float3 rotAroundZ(float angle , float3 pos)
            {
                float3x3 rotMatrix = {
                    float3(cos(angle),sin(angle),0),
                    float3(-sin(angle),cos(angle),0),
                    float3(0,0,0)
                };
                return mul(pos,rotMatrix);  
            }

  

angle會隨着時間參數的增大而增大,從而實現旋轉的功能,如果需要反轉方向,rotMatrix和pos 參數位置互換即可。Unity采用的是左乘。

 

 


免責聲明!

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



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