美文网首页
四元数(Quaternion)和欧拉角(Eulerangle)

四元数(Quaternion)和欧拉角(Eulerangle)

作者: 菜鸟的笔记 | 来源:发表于2019-12-05 11:48 被阅读0次

解释

    四元数用于表示旋转。
    它们结构紧凑,不受万向节锁定的影响,可以轻松插值。Unity内部使用四元数表示所有旋转。
    它们基于复数,不容易直观地理解。您几乎永远不会访问或修改单个四元数组件(x,y,z,w);大多数情况下,您只是采用现有的旋转(例如:Transform),并使用它们来构建新的旋转(例如在两个旋转之间平滑地插值)。您使用99%的时间的Quaternion函数是: Quaternion.LookRotationQuaternion.AngleQuaternion.EulerQuaternion.SlerpQuaternion.FromToRotationQuaternion.identity。(其他功能仅用于特殊用途。)
    Unity的Transform组件里的Rotation是四元数,但是它是以欧拉角(Vector3)的形式展现在我们面前,目的就是为了方便我们修改。因此,我们给Rotation直接赋值的时候,也只能用Quaternion赋值。

下面是实例应用(四元数和欧拉角)
//把对象欧拉角(eulerAngles )全部设置为45°
transform.eulerAngles = new Vector3(45, 45, 45);
//把欧拉角转换为四元数,再赋值
transform.rotation = Quaternion.Euler(new Vector3(45, 45, 45));
//将四元数转换为欧拉角
Vector3 angles = transform.rotation.eulerAngles;
属性或函数 描述 例子
eulerAngles 返回或设置旋转的欧拉角 transform.eulerAngles = new Vector3(45, 45, 45);
Angle 返回两个旋转a和b之间的角度。 Quaternion.Angle(Quaternion a, Quaternion b);
Euler 返回绕z轴旋转z度,绕x轴旋转x度,绕y轴旋转y度的旋转;按这个顺序应用。 Quaternion.Euler(float x, float y, float z);
LookRotation 创建具有指定的正向和向上方向的旋转。 Quaternion.LookRotation(Vector3 forward, Vector3.up);
Slerp 通过t在a和b之间进行球面插值。参数t被夹在[0,1]范围内。 Quaternion.Slerp(Quaternion a, Quaternion b, float t);
FromToRotation 创建一个从一个方向旋转到另一个方向的旋转。 Quaternion.FromToRotation(Vector3 fromDirection, Vector3 toDirection);
identity 就是指Quaternion(0,0,0,0) transform.rotation = Quaternion.identity;

相关文章

网友评论

      本文标题:四元数(Quaternion)和欧拉角(Eulerangle)

      本文链接:https://www.haomeiwen.com/subject/bpldgctx.html