• maya和Unity中的坐标系旋转


    maya软件是用的右手坐标系,默认旋转顺序是ZYX,即先绕Z轴旋转,再绕Y轴旋转,最后绕X轴旋转。

    比如在maya软件中,右侧的旋转顺序是可选的,默认的选择是“XYZ”,其实物体旋转顺序是倒着念,即上面所说的ZYX旋转顺序。

    有兴趣的朋友可以进行验证。

    Unity软件是用的左手坐标系,旋转顺序是YXZ(貌似不能更改),即先绕Y轴旋转,再绕X轴旋转,最后绕Z轴旋转。

    在上面的两个图中,由MAYA的模型导出FBX格式,然后再导入到Unity中,选中的是同一个关节:Jamie_R_Thumb_1

    其在MAYA中的旋转数据是:

    关节方向:(55.921,-47.560,-62.725)
    旋转:(0.00022.60017.700

    其在Unity中的旋转数据是:

    Rotation:(7.88552346.2820117.52884)
    Quaternion:(x,y,z,w) = (0.1222290.3778530.1130740.9107697// 查看对象的四元数属性,可以在Inspector上单击右键,选择Debug模式即可
    // 这里的Rotation和Quaternion值相当于脚本中对象的transform.localRotation和transform.localEulerAngles的属性值

    下面进行分析验证,并说明为什么在两个软件中同样的关节状态出现的属性数值会不同(用到MATLAB工具):

    //以下MATLAB代码
    //把maya中关节方向欧拉角数据转换成四元数
    //这里旋转顺序是写成“ZYX”,而且需要把角度值转换成弧度值
    >> q1 = angle2quat(-62.725*pi/180,-47.560*pi/180,55.921*pi/180,'ZYX')
           
    q1 =
           
        0.7886    0.1810   -0.5274   -0.2592
           
    //把maya中旋转欧拉角数据转换成四元数
    //这里旋转顺序是写成“ZYX”,而且需要把角度值转换成弧度值
    >> q2 = angle2quat(17.700*pi/180,22.600*pi/180,0.000*pi/180,'ZYX')
           
    q2 =
           
        0.9689   -0.0301    0.1936    0.1509
           
    //两个四元数进行乘法运算,在Unity的脚本中的*运算符也表示这个意思,
    //这表示物体先做q1旋转运动,再做q2的旋转运动,得出两次运动后的四元数状态
    //这里已经可以把q3和Unity中此关节的四元数数值进行比较,看有什么不同
    >> q3 = quatmultiply(q1,q2)
           
    q3 =
           
        0.9108    0.1222   -0.3779   -0.1131
           
    //继续把得到的q3值转换成欧拉角
    //但这里的旋转顺序已经是Unity中的“YXZ”了
    >> [pitch,roll,yaw] = quat2angle(q3,'YXZ')
           
    pitch =
           
       -0.8078
           
           
    roll =
           
        0.1376
           
           
    yaw =
           
       -0.3059
           
    //弧度值转换成角度值,并且把角的顺序调整过来
    >> a = [roll,pitch,yaw] * 180/pi
           
    a =
           
        7.8860  -46.2822  -17.5285

    最后得出的欧拉角度是:(7.8860  -46.2822  -17.5285)

    而Unity中的Rotation数据是:(7.885523,46.28201,17.52884)

    至于绕Y轴旋转和绕Z轴旋转的数值正负号的区别,是因为在MAYA和Unity中所采用的左右手坐标系的不同所造成的,可以参考:

    http://answers.unity3d.com/questions/355897/orienting-an-object-the-same-in-maya-and-unity.html

  • 相关阅读:
    写一写这几天安卓开发遇到的坑
    安卓环境搭建
    正则表达式
    一段时间的总结
    路飞-登录页面
    路飞-腾讯云短信接口
    路飞-Redis
    路飞-git操作
    路飞-后台xadmin配置
    路飞-后台处理跨域问题
  • 原文地址:https://www.cnblogs.com/jmpep/p/4486242.html
Copyright © 2020-2023  润新知