unity中四元数的用法及意义

<1> 根据两个向量计算出旋转量,计算出来的旋转量为从fromDirection旋转到toDirection的旋转量

static Quaternion FromToRotation(Vector3 fromDirection,Vector3 toDirection);


<2>static Quaternion LookRotation(Vector3 forward);

static Quaternion LookRotation(Vector3 forward,Vector3 upwards);

使用指定的向前方向和向上方向来创建四元数


例子:

[csharp]  view plain copy
  1. Vector3 vr = new Vector3(1,0,0);  
  2. Quaternion q1 = Quaternion.LookRotation(vr);  
  3. Debug.Log(q1);  
  4.           
  5. Vector3 vforwardp = new Vector3(0,0,1);       
  6. Quaternion q2 = Quaternion.FromToRotation(vforwardp ,vr);  
  7. Debug.Log(q2);  

这里面q1和q2的值是相同的,q2的计算过程是计算向前向量(vforwardp )到当前向量vr的旋转量,而这就是LookRotation的计算方式

<3>

void SetLookRotation(Vector3 view);
void SetLookRotation(Vector3 view,Vector3 up);

也是根据指定的向前和向上向量创建四元数,本质计算过程和LookRotation一样,只不过LookRotation是Quaternion上的静态函数,而SetLookRotation则是Quaternion的成员函数。

<4>

static Quaternion RotateTowards(Quaternion from,Quaternion to, float maxDegreesDelta);

以maxDegreesDelta作为角度步长计算从from到to之间的旋转量

<5>

static Quaternion AngleAxis(float angle,Vector3 axis);

根据旋转轴和旋转角度算出四元数

<6>Quaternion.eulerAngles

存放四元数对应的三个轴向的欧拉角,分别是绕x轴、y轴、z轴旋转的角度

[csharp]  view plain copy
  1. Quaternion q3 = new Quaternion();  
  2. q3.eulerAngles = new Vector3(10, 30, 20);  
  3. Quaternion qx3 = Quaternion.AngleAxis(10,Vector3.right);          
  4. Quaternion qy3 = Quaternion.AngleAxis(30,Vector3.up);  
  5. Quaternion qz3 = Quaternion.AngleAxis(20,Vector3.forward);  
  6.           
  7. Quaternion qxyz3 = qz3*qy3*qx3;  
上面的代码可以得到q3和qxyz3值一样。 从这里可以看出unity中旋转顺序也是按先绕x轴旋转,然后y,最后z 。unity中对向量应用旋转量使用的是向量右乘,即如下:Vector3 newV = qxyz3*v=qz3*qy3*qx3*v;



你可能感兴趣的:(学习笔记之四元数)