问题 使用四元数可以解决万向节锁的问题,但是我在实际使用中出现问题:我设计了一个程序,显示一个三维物体,用户可以输入绕zyx三个轴进行旋转的指令,物体进行相应的转动. 由于用户输入的是绕三个轴旋转的角度,所以很直接的就想到用欧拉角来表示每一个旋转.但是欧拉角会出现万向节锁,所以我使用四元数替代原来的欧拉角,来计算旋转矩阵.但是奇怪的结果出现了,gimbal lock仍然出现,使用四元数和使用欧拉角,程序的表现一模一样. 原因 经过一番思考,并参考 Using Quaternions for Op…
Quaternions are used to represent rotations. 四元数用于表示旋转. They are compact, don't suffer from gimbal lock and can easily be interpolated. Unity internally uses Quaternions to represent all rotations. 它们是紧凑的,不会出现万向节锁并且能够很容易被插值.Unity内使用Quaternion表示所有旋转.…
当初弄不明白旋转..居然找不到资料四元数应该用轴角相乘...后来自己摸明白了 通过两种旋转的配合,可以告别世界空间和本地空间矩阵转换了,大大提升效率. 每个轴相乘即可,可以任意轴,无限乘.无万向节锁问题 四元数旋转: using UnityEngine; using System.Collections; public class RotationTest : MonoBehaviour { public float x, y, z; void Start () { } void Update…