unity物体自身轴旋转_Unity物体旋转方式学习笔记

一、矩阵旋转:

优点:旋转轴可以是任意向量

缺点:旋转其实只需要知道一个向量+一个角度(共4个信息值),但矩阵却用了16个元素(矩阵法消耗时间和内存)

二、欧拉角旋转

优点:容易理解,形象直观;表示更方便,只需要三个值(分别对应x、y、z轴的旋转角度)

缺点:欧拉角这种方法是要按照一个固定的坐标轴的顺序旋转的,因此不同的顺序会造成不同结果;欧拉角旋转会造成万向锁现象,这种现象的发生就是由于上述固定的坐标轴旋转顺序造成的。理论上,欧拉角旋转可以靠这种顺序让一个物体旋转到任何一个想要的方向,但如果在旋转中不幸让某些坐标轴重合,就会发生万向锁现象,这时就会丢失一个方向上的旋转能力(两个旋转轴(环)重叠),也就是说在这种状态下,我们无论怎么旋转(还是按照原先的旋转顺序),都不可能得到某些想要的结果,除非打破原先的旋转顺序或者同时旋转三个轴。

由于万向锁的存在,欧拉旋转无法实现球面平滑插值。

万向锁的简单解决办法:构造一个不同的旋转层级顺序,但是万向锁总是会在某一个顺序发生,调整旋转顺序不是根本解决办法。(Unity使用的是Z-X-Y顺规,即旋转顺序为z轴、x轴、y轴,虽然某些情况下会出现万向锁,但是这种顺规出现万向锁的概率最小)

万向锁解决办法:将欧拉角转换为四元数,对四元数进行Slerp插值,再将这一系列四元数转换为对应的欧拉角,然后作用于需要进行旋转的对象。这种做法缺点在于消耗内存,但是可以使物体任意旋转,灵活度高。

使用欧拉旋转出现旋转路径偏移的根本原因:在万向锁情况下对欧拉角的插值不是线性的。(突变)

静态欧拉角:其旋转轴使用的是静止不同的参考系。

动态欧拉角:使用object本身的坐标系,因而会随着object旋转而旋转。(局部坐标系会随着对象的旋转而旋转)

三、四元数旋转

优点:可以避免万向锁;只需要一个4维的四元数就可以执行绕任意过原点的向量的旋转,方便快捷,在某些实现下比旋转矩阵效率更高;而且四元数旋转可以提供平滑插值。

缺点:比欧拉旋转稍微复杂了一点,因为多了一个维度,理解更困难,不直观。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值