關於旋轉永遠是做游戲的難點和混亂點。我們知道表示一個旋轉有多種方式,簡單的歐拉角,復雜點的四元數,再復雜點的矩陣。之前接觸unity可以用四元數和歐拉角兩種方式表示旋轉,最近一直研究虛幻引擎,目前只看到了歐拉角這一種旋轉方式。
歐拉角是表達旋轉的最簡單的一種方式,形式上它是一個三維向量,其值分別代表物體繞坐標系三個軸(x,y,z軸)的旋轉角度。這樣的話,很容易想到,同樣的一個三維向量,代表了繞x,y,z的旋轉值,先進行那個旋轉是否對結果有影響呢?顯然是有影響的,可以拿着你的手機試一下,不同的旋轉順序會代表不同的旋轉結果。所以,一般引擎都會規定自己的旋轉順序。
下面三張動圖形象的表示了歐拉角的旋轉方式。第一張是繞x軸旋轉pitch,第二張繞y軸旋轉yaw,第三張是繞z軸旋轉roll。
繞三個軸的旋轉值pitch,yaw,roll來自航空界的叫法,翻譯為俯仰角,偏航角,翻滾角,非常形象。它們不一定如上所述,一定分別代表繞x,y,z的旋轉值。
從英文意思出發,roll:是卷;滾動,轉動;輾的意思;
yaw是(火箭、飛機、宇宙飛船等)偏航的意思;
pitch是傾斜;投擲;搭帳篷;墜落的意思;
所以,
roll:是翻滾的意思是,就是繞着機身所在的那個軸 a (z);
yaw:是偏航的意思,偏航就是繞着重力方向為軸 y ;
pitch:是偏航俯仰的意思,即傾斜、墜落的意思,墜落就是以翅膀所在的直線為軸(x)發生旋轉。
另外值得注意的是,pitch值是不能超過90度,這里牽扯到了萬向鎖的知識,不再多說,網上很多討論。
下面這張圖是以攝像機的角度來闡述歐拉角的,可以加深理解。可以看到,pitch,yaw,roll在這里並不是常見的代表繞x,y,z的旋轉值。