加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2D-X源码分析之从cocos2D-X学习OpenGL(19)----旋转表示法

发布时间:2020-12-14 17:05:32 所属栏目:百科 来源:网络整理
导读:从数学上表示旋转,可以有三种表示方法:矩阵法,欧拉角法和四元数法,我们之前已经介绍了矩阵法,它有个问题,就是容易造成万向节死锁,所谓万向节死锁,就是当绕一个轴旋转到90度的时候,再绕另外两个轴旋转的结果都是一样的,也就是说少了一个自由度,另

从数学上表示旋转,可以有三种表示方法:矩阵法,欧拉角法和四元数法,我们之前已经介绍了矩阵法,它有个问题,就是容易造成万向节死锁,所谓万向节死锁,就是当绕一个轴旋转到90度的时候,再绕另外两个轴旋转的结果都是一样的,也就是说少了一个自由度,另外矩阵法其中有无用的数据,造成内存的浪费。

欧拉角法是由欧拉在十八世纪提出,它由三个角表示:俯仰角,yaw偏航角,roll滚转角。


struct Euler{
    btScalar yaw;
    btScalar pitch;
    btScalar roll;
};
欧拉角的表示方法很简洁,只用三个角度就可以表示旋转,但是它也有万向节死锁的情况,而且进行线性插值的时候,由于角度有360度周期的问题,所以变化往往会有不好的效果,所以就有另外一种四元数的表示方法。

四元数是一种超复数,它的表示就是有三个虚部的复数,表示法如下:


由于i,k,j的表示很像笛卡尔坐标系的三个轴,所以可以合在一起表示一个向量,即旋转轴,于是可以用四元数表示旋转如下:


关于四元数更多数学上的介绍可以参考:http://www.cnblogs.com/mengdd/archive/2013/08/05/3238223.html

cocos2d-x中使用Quaternion类表示四元数,定义如下:

class CC_DLL Quaternion
{
public:

    /**
     * The x-value of the quaternion's vector component.
     */
    float x;
    /**
     * The y-value of the quaternion's vector component.
     */
    float y;
    /**
     * The z-value of the quaternion's vector component.
     */
    float z;
    /**
     * The scalar component of the quaternion.
     */
    float w;
    .........
}
下一篇介绍模型,网格和材质


能力不足,水平有限,如有错误,欢迎指出。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读