找回密码
 立即注册
查看: 247|回复: 0

Unity基础【唐老狮】(二)四元数

[复制链接]
发表于 2022-6-29 10:08 | 显示全部楼层 |阅读模式
3D数学-四元数


  • 欧拉角的缺陷
      同一旋转的表示不唯一
    • 万向节死锁
        两个轴重合时,失去一维的调节能力


  • 四元数是什么

    • 四元数构成
        超复数:实数+三个虚数单位[W,V]标量+3维向量轴角对[cos(b/2),sin(b/2)*n],n为轴向量,b为旋转角度

    • Unity四元数
        Quaternion
      • 初始化
          new Quaternion(sin(b/2)x,sin(b/2)y,sin(b/2)z,cos(b/2))Quaternion.AngleAxis(角度,轴)

      • 角度四元数转换
          Quaternion.Euler(x,y,z)Quaternion q; q.eulerAngles

      四元数解决欧拉角缺陷

  • 四元数常用方法

    • 单位四元数:无旋转
        Quaternion.identity

    • 插值运算
        Quaternion.Slerp实现匀/变速转动

    • 向量转换四元数
        Quaternion.LookRotation(Vector3 n)

    • 练习
        c#拓展方法匀变速运镜


  • 四元数计算

    • 四元数相乘
        旋转量叠加

    • 四元数乘向量
        旋转向量

    • 练习

      • 模拟飞机发射不同类型的子弹
          按数字键切换发射模式不同模式实现方法利用四元数相乘旋转设置子弹实例化的方向

      • 摄像机跟随效果

        • 需求
            摄像机在人物斜后方,通过角度控制斜率通过鼠标滚轮控制摄像机距离人物的距离摄像机看向人物头顶一个位置Vector3.Lerp实现相机跟随人物Quaternion.Slerp实现摄像机看向人物

        • 实现
            旋转方向:轴朝向自己,顺时针为正角度叠加,旋转向量,点的平移匀/变速的实现




懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-22 07:05 , Processed in 0.087262 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表