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;



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值