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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值