3D旋转与四元数(Quaternion)
本来只是一个很简单的一个需求:把精灵按z轴随机旋转0-360度。但是 cocos Node 的 setRotation 只接收一个 math.Quat 类型的四元数。
原来我们经常用的那种先按某个坐标轴旋转多少度,再按某个坐标轴旋转多少度,这个叫欧拉旋转。但是欧拉旋转会出现万向节死锁的问题,即可能会出现一个旋转自由度的缺失。只有仅旋转一个轴时,其它两个轴的角度总是为0(不旋转),这时候使用欧拉旋转的结果才是可预期的。
如果我们只旋转z轴,则可以这样:
1 | const quat = new Quat() |
其它在3D世界的复杂情况,都需要使用四元数进行旋转来确保结果可预期。