概念
四元数是简单的超复数。 复数是由实数加上虚数单位 i 组成,其中i^2 = -1。 相似地,四元数都是由实数加上三个虚数单位 i、j、k 组成,而且它们有如下的关系: i^2 = j^2 = k^2 = -1, i^0 = j^0 = k^0 = 1 , 每个四元数都是 1、i、j 和 k 的线性组合,即是四元数一般可表示为a + bk+ cj + di,其中a、b、c 、d是实数。
对于i、j、k本身的几何意义可以理解为一种旋转,其中i旋转代表X轴与Y轴相交平面中X轴正向向Y轴正向的旋转,j旋转代表Z轴与X轴相交平面中Z轴正向向X轴正向的旋转,k旋转代表Y轴与Z轴相交平面中Y轴正向向Z轴正向的旋转,-i、-j、-k分别代表i、j、k旋转的反向旋转。百度百科
作用
Quaternion在Unity中用来表示所有的旋转,他们是紧凑的,并且不会出现欧拉角的万向锁问题。然而,Quaternion是基于复数的并不容易被直观地理解,因此你没有必要访问或修改单个Quaternion组件(x,y,z,w);通常你只需把现有的旋转(例如,来自Transform)并使用它们来构造新的旋转(例如,在两个旋转间平滑地插值)。
Quaternion函数的简单说明
- static function Angle (a : Quaternion, b : Quaternion) : float
返回a和b两者之间的角度 - static function AngleAxis (angle : float, axis : Vector3) : Quaternion
绕axis轴旋转angle,创建一个旋转,代码示例如下:
transform.rotation = Quaternion.AngleAxis(30, Vector3.up);
其中
Vector3.forward = Z轴
Vector3.up = Y轴
Vector3.right = X轴 - static function Dot (a : Quaternion, b : Quaternion) : float
两个旋转之间的点乘,乘积的绝对值越大,则a和b代表的角位移越“相似”。 - static function Euler (x : float, y : float, z : float) : Quaternion
返回一个旋转角度,绕z轴旋转z度,绕x轴旋转x度,绕y轴旋转y度(像这样的顺序)。 - var eulerAngles : Vector3
返回表示旋转的欧拉角度,eulerAngles表示的角度,绕z轴旋转euler.z度,绕x轴旋转euler.x度,绕y轴旋转euler.y度(这样的顺序)。 - static function FromToRotation (fromDirection : Vector3, toDirection : Vector3) : Quaternion
从fromDirection到toDirection创建一个旋转。通常你使用这个旋转一个变换的其中一个轴,例如,在世界空间,y轴跟随一个目标方向toDirection - static var identity : Quaternion
返回恒等式旋转(只读)。让物体完全对齐于世界坐标或父轴,也就是相对没有旋转、 - static function Inverse (rotation : Quaternion) : Quaternion
返回rotation的反向旋转 - static function Lerp (from : Quaternion, to : Quaternion, t : float) : Quaternion
通过t值from向to之间插值(就是每次增加t),并且规范化结果。效率上比Slerp更快,但是旋转较远的时候的效果没有Slerp好。 - function LookRotation (forward : Vector3, upwards : Vector3 = Vector3.up) : void
创建一个旋转,沿着forward(z轴)并且头部沿着upwards(y轴)的约束注视。也就是建立一个旋转,使z轴朝向view ,y轴朝向up。当forward的方向是0,记录一个错误 - static operator * (lhs : Quaternion, rhs : Quaternion) : Quaternion
乘法重载预算符,意义是两个旋转的组合,就是先旋转lhs,然后在旋转rhs。但是要注意的是,旋转是不可交换的,lhs*rhs不等于rhs*lhs。 - static function RotateTowards (from : Quaternion, to : Quaternion, maxDegreesDelta : float) : Quaternion
从from到to旋转一个角度,基本上和Quaternion.Slerp,但是这个函数的旋转的角速度永远不会超过maxDegreesDelta。当masDegreeDelta为负数时,旋转将相反。 - function SetFromToRotation (fromDirection : Vector3, toDirection : Vector3) : void
创建一个从fromDirection到toDirection的旋转 - function SetLookRotation (view : Vector3, up : Vector3 = Vector3.up) : void
创建一个旋转,沿着forward(z轴)并且头部沿着up(y轴)的约束注视。也就是建立一个旋转,使z轴朝向view ,y轴朝向up。 - static function Slerp (from : Quaternion, to : Quaternion, t : float) : Quaternion
球形插值,通过t值from向to之间插值。 - function ToAngleAxis (out angle : float, out axis : Vector3) : void
转换一个旋转用“角-轴”表示。
总结
都是从API中整理总结的,以为较常用到,所以在这备忘一下!