我的Unity 3D之旅——杂记之三种形式的旋转

这篇博客探讨了Unity中物体旋转的三种方式:旋转矩阵、欧拉旋转和四元数。旋转矩阵虽直观但计算量大,欧拉旋转易懂但存在万向节死锁问题,而四元数则能有效避免这个问题,但其四维特性增加了理解难度。Unity提供了便捷的转换函数以适应不同旋转需求。
摘要由CSDN通过智能技术生成

Transform组件是Unity中非常常用的一个组件,用于控制物体的位移、旋转和缩放,脚本中也有对应的Transform类实现对应的控制。而旋转,是这三种变换中最为复杂的一种。我们所熟悉的旋转一般是矩阵旋转和欧拉旋转。在Unity中,还有一种用于描述旋转的方式,叫四元数,即Quaternion。那么它们之间有什么区别和联系呢?(又来这句- -)通过查阅资料,我得到了一些启发,下面一一说来。

旋转矩阵

学过线性代数就会知道,把一个三维向量乘上一个三阶旋转矩阵就能得到旋转后的向量。这种方法的好处是可以实现三维空间中的任意旋转,但是缺点是浪费空间——确定一个旋转只需要知道旋转轴的方向向量和旋转角度共4个值,而三阶旋转矩阵需要9个值(还有用四阶旋转矩阵的,那就需要16个值,更多了……不过不是很明白是怎样用四阶旋转矩阵表达三维空间的旋转的,如果有大神看到,望不吝赐教),另外矩阵乘法也是不小的计算量。

欧拉旋转

欧拉旋转是指定三个正交的旋转轴,按照一定的顺序分别绕着这三个轴旋转一定的角度,一个简单的例子就是空间直角坐标系的x轴、y轴和z轴。欧拉旋转实际上是一系列坐标轴旋转的组合。使用欧拉旋转的好处是直观,易于理解,表示起来也方便,只需要3个值来对应指定的3个轴下的旋转角度,例如在Unity的C#脚本中欧拉旋转就直接使用了Vector3这个类(三维向量的封装类)。不过欧拉旋转的具体实现仍是三个旋转矩阵相乘,计算量上没有优势。当然,欧拉旋转也存在缺点。一是欧拉旋转是按照预先定义好的三个轴和顺序来旋转的,因此不同旋转轴的选取和不同的顺序都会导致不同的旋转结果。二是欧拉旋转存在Gimbal Lock(万向节死锁)现象,理论上欧

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值