真Unity3d_四元数Quaternion

如果想完全,详细的了解四元素,可以看清华妹子的文章

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

其他人的博客好像也没有说很清楚

清华妹子的这个文章现在有12W的浏览量,反正我是三年前看的,3年前没懂,3年后也没懂

反正unity3d里面的用法就是2个

第一个用法是:2个对象的面对面,敌人面对玩家,或者玩家瞄准敌人

Quaternion rotate = Quaternion.LookRotation (_player.transform.position - transform.position ,Vector3.up);

一开始,我自以为懂点矢量运算(之前做过RTS游戏),然后这么写

Vector3 dir = _player.transform.position * 0.95f - transform.position;
GameObject obj = vp_Utility.Instantiate (Bullect, transform.position, Quaternion.Euler (dir)) as GameObject;

结果当然是不行的,射线总是差几度,有些偏移

网上说这么写,其实应该2个变量调转的,我的测试结果是射线45度向上的,不知为可(按我的理解应该是reverse)

transform.position - target.position
但其实根据我的理解的矢量运算,应该确实是2个变量调换

应该是,target 矢量- source矢量

结果我的target 是 _player,

所以,_player.transform.position - transform.position

结果是我的需求,没毛病

这个问题搞了半天,就一个面对面问题,从中午搞到凌晨一点多,终于用LookRotation 方法搞定,机智如我,马上开个方便面助助兴


第二个用法是:四元数乘以三维矢量

1.计算angent的人物目标向量和人物当前转向向量,之间的夹角

Vector3 velocity = Quaternion.Inverse(transform.rotation) * agent.desiredVelocity;
float angle = Mathf.Atan2(velocity.x, velocity.z) * 180.0f / 3.14159f;


2.最最普通的设置人物旋转

Quaternion.Euler (0, currentRotationAngle, 0);

3.很简单的朝向改变 ,下面代码中,lastDirection是摄像机向前的射线向量,重点是LookRotation()方法,意思明显就是获取和摄像机向量相同的四元数

Hololance.rotation = Quaternion.AngleAxis(0,Vector3.right);
Hololance.rotation = Hololance.rotation* Quaternion.LookRotation( lastDirection);
这么写,应该是等价的,多个四元数相乘

Hololance.rotation = Quaternion.AngleAxis(0,Vector3.right) * Quaternion.LookRotation( lastDirection);



关于四元数的一些深入测试研究

worldRotation = Quaternion.AngleAxis(deltaRotation, camera.transform.forward) * worldRotation;

我碰到的第一问题就是四元数相乘,到底是什么意思呢

矢量和矢量的乘积,可以构成新的标量

而四元数的乘积又是怎么一回事呢?


可以从下面这个哥们的博文,反推一点四元数知识,但其实他也写不怎么好,他是想做一个测试是,但是文章一开头确说四元数乘以矢量,也就是四元数乘三维矢量,不知道他是到底搞清楚了没有

http://www.cnblogs.com/hont/p/5958167.html






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

avi9111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值