unity3d 四元数应用

四元数定义:

Quaternion q = new Quaternion(0, 0, 1, 0); //相当于Quaternion(new Vector3(0, 0, 1)sin(180/2), cos(180/2))  即:绕z轴,旋转180°,的四元数

Quaternion.AngleAxis(90, Vector3.up); //绕y轴旋转90°,的四元数

Quaternion.Euler (new Vector3(90,90,90));  //先绕z轴90°,再绕x轴90°,再绕y轴90°,的四元数

Quaternion LookRotation ( Vector3 forward, Vector3 upwards=Vector3.up )

看向target

Vector3 relativePos = target.position - transform.position;
        Quaternion rotation = Quaternion.LookRotation(relativePos);
        transform.rotation = rotation;

Quaternion应用;
1、四元数*四元数,得到旋转后的四元数

transform.rotation = Quaternion.AngleAxis(degrees, transform.right) * transform.rotation; //低头


2、四元数*Vector3,得到旋转后的位置Vector3

Vector3 newVector = Quaternion.AngleAxis(90, Vector3.up)* transform.position;    绕y轴旋转后的位置


rotate注意事项:

  1. 绕坐标系E下的Z轴旋转α,绕坐标系E下的Y轴旋转β,绕坐标系E下的X轴旋转r,即进行一次旋转时不一起旋转当前坐标系;
  2. 绕坐标系E下的Z轴旋转α,绕坐标系E在绕Z轴旋转α后的新坐标系E'下的Y轴旋转β,绕坐标系E'在绕Y轴旋转β后的新坐标系E''下的X轴旋转r, 即在旋转时,把坐标系一起转动;
transform . Rotate ( new   Vector3 ( X Y Z )); 顺序ZXY   等同于单步YXZ

等同于单步执行

transform.Rotate(new Vector3(0Y0)); 

transform.Rotate(new Vector3(X00)); 

transform.Rotate(new Vector3(00Z)); 


引用:

http://blog.csdn.net/candycat1992/article/details/41254799

http://blog.csdn.net/liulong1567/article/details/46420285


你可能感兴趣的:(Unity3D)