8-04 359 views
推荐阅读 <<3d数学基础:图形与游戏开发>>, 本文会持续更新一些有趣的数学知识
欧拉角
依照Unity, 使用左手坐标系, 左手法则定义旋转正方向
本质:依次以三个相对旋转角度表示的旋转 [保证顺序] [相对旋转]
unity里约定顺序为y-x-z 即按照世界坐标系y, 物体坐标系x, 物体坐标系z顺序旋转.
为什么起始要按照世界坐标系呢?因为旋转必定和世界坐标发生联系,否则也就无法确定一个旋转了…
万向锁
当物体x轴旋转90度时, y还是按照世界坐标的y旋转,而z是按照物体坐标的z旋转, 结果就是z, y旋转效果一样.
方向向量转换欧拉角
--lua example: function Vector3.Forward2Euler(forward) local xAngle = math.asin(-forward.y) * rad2Deg return Vector3.New(xAngle, atan2(forward.x, forward.z) * rad2Deg, 0); end
四元数
本质:绕一根旋转轴旋转一次表示的方向变换
本着一句话说不清楚就不解释的原则,多用在计算旋转的平滑插值,会用就行:)
//Unity相同旋转量的4种表示形式 Quaternion q1 = Quaternion.Euler(90, 0, 0);//欧拉角转换 Quaternion q2 = Quaternion.LookRotation(Vector3.down);//前方朝向下 Quaternion q3 = Quaternion.AngleAxis(90,Vector3.right);//沿x轴旋转90度 Quaternion q4 = Quaternion.FromToRotation(Vector3.up, Vector3.forward);//原来的上方变为了前方
Slerp
偷个懒, 贴个链接
版权属于: CrazyStone Entertainment
原文地址: https://www.crazystonent.com/2020/08/04/%e6%b8%b8%e6%88%8f%e6%95%b0%e5%ad%a6%e5%9f%ba%e7%a1%80/
转载时必须以链接形式注明原始出处及本声明。