圖形學中一些旋轉矩陣推導【多圖警告】


一、2D中向量旋轉公式推導

已知向量(x,y)旋轉θ角之后得到向量(x',y')

如下圖所示
image
這時我可以看到的是信息是

旋轉后的向量與之前的向量長度r它是不變的

第一個向量所具有的信息是
image
旋轉后的向量所具有的信息是
image
根據三角函數公式
image
將此關系式拆開就可以得到
image
最后可以得到
image
寫成矩陣形式
image

二、從局部空間變換到世界空間SRT矩陣中R的推導記憶

我這里是unity的左手坐標系,所以接下來我都用左手定則來闡述
image
首先我們先看,繞z軸的3維坐標變換
image
z坐標保持不變,旋轉x、y坐標,這可不就是我們上面推導的二維坐標系的旋轉公式嗎

這樣我們可以直接得到
image
除了y軸旋轉有點不同,x軸與z軸都是在相應位置的二維旋轉變換

那么為什么y軸會不同

看旋轉方向

繞z軸旋轉,是從x軸開始,繞原點逆時針旋轉(你也可以想成x叉乘y,正好等於z軸)

繞x軸旋轉,是從y軸開始,也繞原點逆時針旋轉(你也可以想成y叉乘z,正好等於x軸)

可是繞y軸旋轉,是從x軸開始,繞原點逆時針旋轉(x叉乘z,等於-y)

所以相當於把角度向反方向旋轉,這就等於了繞y軸旋轉,旋轉矩陣不同的記憶方法

害,之前硬啃《Unity Shader入門精要》的時候沒多想,直接硬記,果然這些東西還是自己有能力推一遍會更加深刻吧

三、繞任意軸旋轉矩陣

在圖形學中,我們經常會遇到繞軸旋轉的問題,這里先記錄下歐拉角公式里的繞任意軸旋轉

下面是我學習筆記,思路可能結果和思路都有可能出錯,不代表絕對,僅供參考。
image

假設一個向量n(0,0,1),並將它看作旋轉軸,再假設一點v(x,y,z),繞n向量(軸),旋轉θ角,得到v’(x1,y1,z1).

首先我先找到它們共有的信息:

顯然||v||模是等於||v’||模的.

根據向量加減,我們可以得到image
(向量v等於水平方向v//加豎直方向v⊥)
image
由這張圖我們可以想到,image,那么我們先求出向量image
image向量v投影到向量n的長度再乘於**單位向量n **得到的。
image

非常好,我已經得到一個已知量了,只要再求個v'⊥就可以了,
我們不妨求個垂直於v//v'⊥的向量w
image
image
根據image
這些都是我們已知的了,代入方程式1;
image
自此我們得到了x基向量v'⊥
很好,再來求個y基向量也就是向量w,我們就可以知道旋轉后的v'⊥
根據方程式2:
image
同軸同向叉乘無意義,最后得
image
完事了,最后將方程填完就可以得到v'⊥
image
image
image

僅供參考

四、Unity中解決萬向節鎖

1、首先什么是萬向節鎖1、首先什么是萬向節鎖

按我的理解就是,正常情況直接使用transform.localEulerAngles是沒問題的,但是根據Unity的zxy的旋轉規則,當你是先繞x軸(pitch俯仰)旋轉90度后,這時再去單獨旋轉y(Yaw偏航),和單獨旋轉z,效果都是繞z軸(Roll桶滾)旋轉,這就不是我們要的結果了。

然后解決的辦法就是用四元數(Quaternion)

2、什么是四元數

這個我推薦去b站搜四元數

3、結論

通過了解與實際操作后,將歐拉角帶入unity四元數Quaternion.Euler()中即可。

Unity官方文檔關於Quaternion的描述:
https://docs.unity3d.com/ScriptReference/Quaternion.html

本人之前在搞攝像機跟隨旋轉視角和人物轉向的時候踩過一次坑,之后通過各種資源知道了用四元數,所以在這按自己的想法記錄下,同時也推薦朋友們去了解,共同進步


免責聲明!

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



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