Unity旋转 欧拉角和四元数

Unity中的旋转最为常知的是Transform.rotation,但其内部实现是由Quaternion(四元数)进行计算处理,而Inspactor中显示的旋转值是由EulerAngles(欧拉角)处理。

Unity使用四元数对实际的旋转值进行计算和存储,使用欧拉角对基于世界空间坐标的旋转进行描述和显示,而Inspacetor中显示的欧拉角是将物体的四元数值转换为欧拉角进行显示。

欧拉角旋转在Unity中的固定旋转顺序为Z, X, Y,例如要旋转到(1,2,3)旋转过程是(0,0,3)(0,2,3)(1,2,3),由于欧拉角旋转会出现万向节死锁问题,所以即便是通过设置.eulerAngles更新旋转,其实际处理方式还是通过转换为四元数后,经过四元数计算处理,并保存,最后再转化为欧拉角进行显示。使用欧拉角显示的主要原因是欧拉角可以表示>180度的角度值。

欧拉角产生死锁的主要原因是欧拉角值变化时,Y轴的变换时在模型坐标系中变换,其他轴是在世界坐标轴中变换,所有会在某些时刻发生模型坐标系的某个轴与世界坐标系的某个轴发生共面关系,也就是同轴、旋转面平行,这种情况下导致某个轴的自由度消失,也就是失效,无法进行正常的变换,但四元数不存在这个问题,四元数表示的事3D空间下的旋转值。

图中所示为X轴旋转90度时,模型坐标系的Z轴与世界坐标系的Y轴发生产生共面关系,此时修改Y,Z任一轴向值,旋转均为同一轴向变换

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值