您的位置:首页 > 财经 > 产业 > 关于四元数的使用

关于四元数的使用

2024/11/16 0:07:33 来源:https://blog.csdn.net/m0_70388078/article/details/142093486  浏览:    关键词:关于四元数的使用

(1)当一个物体和世界坐标的角度不一样时,想要绕自己本身的方向旋转

乘法顺序决定了绕世界还是自己

绕本地轴进行旋转:transform.rotation = transform.rotation * Quaternion;
绕世界轴进行旋转:transform.rotation = Quaternion * transform.rotation;

(2)四元数 * 四元数

两个旋转量的叠加 相当于旋转

 Quaternion r = Quaternion.AngleAxis(20, Vector3.up);
 this.transform.rotation = this.transform.rotation * r;

设置一个四元数 以y轴方向旋转20度 我们想让绕本地轴进行旋转 就乘在前面 这样就相当于 在本地轴的基础上绕y轴旋转了20度

(3)四元数 * 向量 (还没用明白)

返回一个新向量 相当于旋转向量

(4)Quaternion.AngleAxis(角度,轴)

注意:轴 Vector3.right是以自己的坐标系右侧 并不是世界坐标系右侧

(5)实现飞机的左右旋转 并自动归位

注意:当归位时 本地角度不能与初始角度相乘 四元数*四元数=叠加角度 假设本地角度为30度 初始角度也为30度 30度叠加30度 无限旋转

但是当旋转时 是可以相乘 因为 本地角度*旋转角度 相当于在本地角度的基础上进行旋转角度

//记录初始角度
Quaternion start;
Quaternion rotU;void Start(){start = this.transform.rotation;}void Update(){float h = Input.GetAxis("Horizontal");//当AD键没有按下的时候 我们就让当前的角度缓慢变为初始角度 实现了归位if (h == 0){this.transform.rotation = Quaternion.Slerp(this.transform.rotation, start, Time.deltaTime);}//当AD键盘按下的时候 我们就判断是左边还是右边else{rotU = h > 0 ? Quaternion.AngleAxis(-20 * Time.deltaTime, Vector3.forward) : Quaternion.AngleAxis(20 * Time.deltaTime, Vector3.forward);//让飞机本地角度 * 旋转角度 就实现了飞机旋转this.transform.rotation = this.transform.rotation * rotU;}}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com