欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

欧拉角 四元数 旋转 29

程序员文章站 2022-03-26 17:25:29
...

1)笔记

1)旋转的表示
  (1)直观的旋转,任何3D物体,你可以把一个物体旋转某个角度,分别绕XYZ旋转多少,然后得到一个朝向
  	也就是:任何一个3D物体总是可以表示为:绕XYZ轴旋转了多少度

  	X:30 Y:60 Z:70-->物体的一个方位-->旋转-->欧拉旋转

  (2)旋转先后顺序很重要   X:30 Y:60 Z:70  X:30 Y:70 Z:60  顺序不一样,导致的结果可能不一样(拿着一个长方体 绕X轴和Z轴旋转一下就知道了);

     游戏引擎规定一个默认的顺序

     unity的欧拉旋转顺序: zxy
     creator 3d: yzx

     顺序不一样结果不一样,所以游戏引擎规定了一个顺序;

  (3)欧拉旋转-->3维向量  是垂直于哪个轴旋转 绕x轴旋转多少度  绕y轴旋转多少度  绕z轴旋转多少度  

  (4)欧拉旋转
      优点: 简单、直观

      缺点:
        不方便参与矩阵计算, 模型坐标变换到世界某个位置,需要乘上变换矩阵 平移*旋转*缩放;
        有万向节锁的缺点;

  (5)引擎内部运算的时候,我们不使用欧拉角,而是使用四元数-->表示物体旋转的数学工具

  (6)四元数也可以表示旋转,但是没有欧拉角那么直观:

  (7)方便参与矩阵计算;
     没有万向节锁的毛病;

  (8)四元素(Quat)和欧拉角的变换 yzx
     x y z w, 是个四维向量

     Quat(x,y,z,w),静态方法和成员,Vec3类似
   
     静态方法:
     	欧拉角转四元数: fromEuler: 给定一个欧拉角,可以返回一个表示旋转的四元数对象

     	四元数转欧拉角: toEuler

     	[-180,180] [-90.90]
     	[-180,-90] [90, 180]

     成员方法:
        getEulerAngles

2)3D物体旋转控制
  四元数来控制旋转:
    rotation:获取本地旋转,返回对象是一个四元数

    worldRotation:世界旋转返回对象也是一个四元数

    getRotation(是否new四元数对象):

    getWorldRotation: 获取世界旋转,返回一个四元数对象

	setRotation(设置节点世界旋转, 有2个版本 四元数对象版本Quat  四元数分量版本(x,y,z,w))

	setWorldRotation:设置节点世界旋转(叠加父亲的旋转角度)


  欧拉角来控制旋转:
  	eulerAngles: 表示本地旋转

  	setRotationFromEuler:使用欧拉角来设置物体的本地旋转(x,y,z)  绕x轴 、绕y轴 、绕z轴  旋转多少度

  	setWorldRotationFromEuler: 不管父亲旋转多少度, 设置为世界旋转多少度(x,y,z) -->YZX



3)
   getXXX: 是new出来
    xxx: 不new