zoukankan      html  css  js  c++  java
  • 欧拉角/姿态角的旋转顺序问题

    当我们在OpenGL或Directx中需要对模型(比如飞机)的姿态进行旋转变化时,可能会对变化顺序有些疑惑,不知道偏航、俯仰、滚转三者的先后顺序。

    首先我们需要了解的是:姿态的变换是针对模型本体的坐标系,比如我们规定飞机的头指向-z轴,飞机的右侧指向x轴,飞机的上方指向y轴。无论模型如何转动,模型的本体坐标系始终相对模型不发生变化,我们的姿态变换也是针对模型本体坐标系的,每一次旋转都是针对上一次旋转后的模型本体坐标系进行旋转,也就是内旋。在模型的本体坐标系下,模型的姿态转动顺序为偏航-俯仰-滚转,即yaw-pitch-roll,对应的轴为y-x-z。

    其次,模型所存在的世界有一个固定的坐标系,这个坐标系在模型创建出来的时候便已经固定了,我们可以通俗的理解为obj模型文件中的组成模型样子的点是固定不变的,这些固定不变的点存在于一个固定的坐标系下,即屏幕右侧为x,屏幕上为y,屏幕外为z(也可能不是该轴向,按实际来定)。绕固定的坐标轴旋转即为外旋。

    姿态的变换是相对模型本体的,是内旋,这是不容置疑的,即为偏航-俯仰-滚转。

    我们需要注意的是,矩阵乘法是外旋。当我们通过矩阵对模型进行姿态变化时,正确的操作是先滚转,再俯仰,最后偏航。

    但是为什么先滚转就是对的呢,我的理解是这样的,滚转首先肯定是绕机头轴向的滚转才有实际意义,假如我们先绕y偏航45度,然后绕z或x俯仰,最后发现最后那个轴转都不是正确的滚转。

    在Directx中 即为 点坐标×滚转矩阵×俯仰矩阵×偏航矩阵,而在opengl中则为 偏航矩阵×俯仰矩阵×滚转矩阵×点坐标

  • 相关阅读:
    Android网页打开指定App
    使用Android Studio Gradle实现友盟多渠道打包
    Android开发 PopupWindow弹窗调用第三方地图(百度,高德)实现导航功能
    Android使用Mob ShareSDK 分享不同平台
    Android布局优化之层级优化
    (Facebook开源项目)Fresco:一个新的Android图像处理类库
    关于Android开发的几点建议
    [AndroidTips]startService与bindService的区别
    基于HBase的手机数据备份系统 .
    MySQL在CenterOS和Ubuntu的安装
  • 原文地址:https://www.cnblogs.com/ceerqingting/p/13358254.html
Copyright © 2011-2022 走看看