unity世界坐标间角度_Unity世界坐标局部坐标下的旋转

更新时间:2023-06-17 11:02:30 阅读: 评论:0

unity世界坐标间⾓度_Unity世界坐标局部坐标下的旋转
⼀、旋转⽅法
在 Unity 中为物体旋转提供了各种 ,例如 RotateAround、Rotate、LookAt 等⽅法。但为了避免万向节死锁的问题,⼀般使⽤四元数来表⽰物体的旋转。韩文
四元数的乘法可以看作对⼀个物体施加两次旋转,最终的旋转⾓度由这两次旋转的⾓度决定,旋转的顺序也会对旋转的结果产⽣影响
(Q1*Q2≠Q2*Q1),因为四元数乘法的本质就是的乘法。
⼆、世界坐标&局部坐标
物体的坐标分为世界坐标(global)和局部坐标(local)平子理沙
世界旋转坐标(如ation)表⽰物体相对于世界坐标系下的旋转⾓度
局部旋转坐标(如transform.localRotation)表⽰物体相对于⽗物体坐标系下的旋转⾓度,如果没有⽗物体,则局部旋转坐标与世界旋转坐标相同
另外,在 Inspector ⾯板中 Transform 的值也是物体的局部坐标。
三、世界坐标下的旋转
利⽤四元数旋转时要记住:旋转轴属于世界坐标系还是物体坐标系是由乘法的顺序决定的。
所以
绕本地轴进⾏旋转时:ation = ation * Quaternion;
绕世界轴进⾏旋转时:ation = Quaternion * ation;
在这⾥不需要知道任何本地旋转坐标或者对旋转轴进⾏坐标系之间的转换。
四、局部坐标下的旋转
在局部坐标下的旋转操作也是⼀样的,只有旋转顺序决定了旋转轴属于世界坐标系还是物体坐标系:
西式早餐绕本地轴进⾏旋转:transform.localRotation = transform.localRotation * Quaternion;
绕世界轴进⾏旋转:transform.localRotation = Quaternion * transform.localRotation;
对于绕本地轴的旋转,在世界坐标以及局部坐标下进⾏操作的结果是相同的,⽽绕世界轴旋转时,得到的结果是不⼀样的。
因为这时物体的旋转实际上可以分为两个过程:
物体本地的旋转(相对于⽗物体的旋转)+ ⽗物体的旋转,也就是 ation = ation * transform.localRotation。
五、旋转实例
⾸先创建⼀个⽗物体 parentCube,两个⼦物体 childCube1、childCube2。
1、本地轴旋转
1 usingUnityEngine;2
3 public classQuaternionTest : MonoBehaviour
4 {
5 publicTransform childCube1;
所以然
6 publicTransform childCube2;7
8 voidUpdate()9 {10 Quaternion rotU = Quaternion.AngleAxis(100 *Time.deltaTime, Vector3.up);11
右乘表⽰物体绕本地轴旋转,所以 childCube 的旋转是绕⾃⾝Y轴进⾏的,parentCube 的旋转并不会对 childCube 旋转产⽣影响,两种⽅式旋转相同。
2、世界轴旋转
1 usingUnityEngine;2
3 public classQuaternionTest : MonoBehaviour
西语4 {
5 publicTransform childCube1;
6 publicTransform childCube2;7
谷歌英文网8 voidUpdate()9 {10 Quaternion rotU = Quaternion.AngleAxis(200 *Time.deltaTime, Vector3.up);11
mcdonalds
*ansform.localRotation;13 }14 }
左乘表⽰物体绕世界轴旋转,在世界坐标下进⾏旋转的时候⽆需考虑⽗物体的旋转⾓度,导致 childCube1 最终旋转轴是世界坐标系的Y 轴。
⽽在局部坐标下进⾏旋转的时候可以理解为先将⽗物体的旋转⾓度置零,此时 childCube2 绕世界坐标系的Y轴旋转,之后再进⾏⽗物体的旋转,这样就会导致物体旋转轴随着⽗物体改变⽽改变,换句话说就是物体本⾝的旋转轴会指向⽗物体的Y轴。
3、rotation与localrotation的关系
物体的旋转 = 物体相对于⽗物体的旋转 + ⽗物体的旋转,即 ation=ation *
冰与火之歌 权力的游戏transform.localRotation
1 usingUnityEngine;2
3 public classQuaternionTest : MonoBehaviour
4 {
游戏成瘾精神疾病
5 publicTransform childCube1;
6 publicTransform childCube2;7
8 voidUpdate()9 {10 Quaternion rotU = Quaternion.AngleAxis(200 *Time.deltaTime, Vector3.up);11
*ansform.localRotation;ansform.localRotation = rotU *ansform.localRotation;13 }14 }resultfrom
这两个的旋转轴相同,都是⽗物体的Y轴
六、总结
在使⽤四元数进⾏旋转操作的时候要注意乘法的顺序:左乘代表绕世界轴旋转,右乘代表绕本地轴旋转。
在对世界坐标和局部坐标进⾏右乘时⼆者会得到相同的结果,⽽进⾏左乘时则会得到不同的结果,根本的原因是对局部坐标操作时需要考虑⽗物体的旋转,⽽对世界坐标操作时则不需要这种情况。
*** |  以上内容仅为学习参考、学习笔记使⽤  | ***

本文发布于:2023-06-17 11:02:30,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/148124.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:旋转   物体   坐标   世界
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图