欧拉角/姿态角的旋转顺序问题
當(dāng)我們在OpenGL或Directx中需要對模型(比如飛機)的姿態(tài)進行旋轉(zhuǎn)變化時,可能會對變化順序有些疑惑,不知道偏航、俯仰、滾轉(zhuǎn)三者的先后順序。
首先我們需要了解的是:姿態(tài)的變換是針對模型本體的坐標系,比如我們規(guī)定飛機的頭指向-z軸,飛機的右側(cè)指向x軸,飛機的上方指向y軸。無論模型如何轉(zhuǎn)動,模型的本體坐標系始終相對模型不發(fā)生變化,我們的姿態(tài)變換也是針對模型本體坐標系的,每一次旋轉(zhuǎn)都是針對上一次旋轉(zhuǎn)后的模型本體坐標系進行旋轉(zhuǎn),也就是內(nèi)旋。在模型的本體坐標系下,模型的姿態(tài)轉(zhuǎn)動順序為偏航-俯仰-滾轉(zhuǎn),即yaw-pitch-roll,對應(yīng)的軸為y-x-z。
其次,模型所存在的世界有一個固定的坐標系,這個坐標系在模型創(chuàng)建出來的時候便已經(jīng)固定了,我們可以通俗的理解為obj模型文件中的組成模型樣子的點是固定不變的,這些固定不變的點存在于一個固定的坐標系下,即屏幕右側(cè)為x,屏幕上為y,屏幕外為z(也可能不是該軸向,按實際來定)。繞固定的坐標軸旋轉(zhuǎn)即為外旋。
姿態(tài)的變換是相對模型本體的,是內(nèi)旋,這是不容置疑的,即為偏航-俯仰-滾轉(zhuǎn)。
我們需要注意的是,矩陣乘法是外旋。當(dāng)我們通過矩陣對模型進行姿態(tài)變化時,正確的操作是先滾轉(zhuǎn),再俯仰,最后偏航。
但是為什么先滾轉(zhuǎn)就是對的呢,我的理解是這樣的,滾轉(zhuǎn)首先肯定是繞機頭軸向的滾轉(zhuǎn)才有實際意義,假如我們先繞y偏航45度,然后繞z或x俯仰,最后發(fā)現(xiàn)最后那個軸轉(zhuǎn)都不是正確的滾轉(zhuǎn)。
在Directx中 即為 點坐標×滾轉(zhuǎn)矩陣×俯仰矩陣×偏航矩陣,而在opengl中則為偏航矩陣×俯仰矩陣×滾轉(zhuǎn)矩陣×點坐標
總結(jié)
以上是生活随笔為你收集整理的欧拉角/姿态角的旋转顺序问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第一章 采购的类别
- 下一篇: 语音笔记12 CUCM高级路由