Unity3d

来源:互联网 发布:sql注入拦截 编辑:程序博客网 时间:2024/06/06 02:43

四元数包含一个分量和一个三维分量,四元数Q可以记作:

Q=[w,(x,y,z)]

在3D数学中使用单位四元数来表示旋转,对于三维空间中旋转轴为n,旋转角度为a的旋转,如果用四元数表示,四个分量分别是:

w = cos(a/2)
x=sin(a/2)cos(Ax)
y=sin(a/2)cos(Ay)
z=sin(a/2)cos(Az)

其中cos(Ax)、cos(Ay)、cos(Az)分别为旋转轴的x,y,z分量。

在3D数学中,旋转还可以用欧拉角和矩阵表示,但是每一种表示都有各自的优缺点:

欧拉角 矩阵 四元数 旋转一个位置点 不支持 支持 增量旋转 不支持 支持,速度较慢 平滑插值 支持 不支持 内存占用 3个数值 16个数值 表达式是否唯一 无数种组合 唯一 问题 万象锁 矩阵蠕变

在Unity中,四元数使用Quaternion类来表示。

官方手册:https://docs.unity3d.com/ScriptReference/Quaternion.html

变量:

变量 - x 四元数x的分量(除非对四元数有一定的了解,否则不建议直接更改) y 四元数y的分量(除非对四元数有一定的了解,否则不建议直接更改) z 四元数z的分量(除非对四元数有一定的了解,否则不建议直接更改) w 四元数w的分量(除非对四元数有一定的了解,否则不建议直接更改) this[index] 通过下标来访问分量 eulerAngles 返回表示该旋转的欧拉角 identity 返回同一象限的四元数,即该四元数表示没有旋转

函数列表:

函数 - Set 设置Quaternion的x/y/z/w分量 ToAngleAxis 将四元数转换为一个角-轴表示的旋转 SetFromToRotation 设置一个四元数表示fromDirection到toDirection的旋转 SetLookRotation 设置一个四元数表示朝向为forward,上方向为up的旋转 operator * 连接两个旋转,该相乘操作的结果作用相当于依次用用两个旋转操作 Dot 两个旋转点乘 AngleAxis 根据旋转角和旋转轴创建一个四元数 FromToRotation 生成一个四元数表示fromDirection到toDirection的旋转 LookRotation 生成一个四元数表示朝向为forward,上方向为up的旋转 Slerp 根据t值在四元数from和to之间进行球形插值 Lerp 根据t值在四元数from和to之间进行插值,并将结果规范化 RotateTowards 将旋转from变到旋转to Inverse 返回旋转的逆 Angel 返回a和b两个旋转之间的夹角角度 Euler 返回先沿z轴旋转z角度,然后沿x轴旋转x角度,最后沿y旋转y角度的旋转