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