var quat = new cc.Quat(1,2,3,4);
cc.Quat.rotateX(quat, quat, 90);
cc.Quat.rotateX(quat, quat, -90);
console.log(quat);
期望结果:
quat 为 Quat(1,2,3,4) 与旋转前不变
实际结果
Quat {x: 0.6563156479251437, y: 0, z: 0, w: 0.3236432453668684}
var quat = new cc.Quat(1,2,3,4);
cc.Quat.rotateX(quat, quat, 90);
cc.Quat.rotateX(quat, quat, -90);
console.log(quat);
期望结果:
quat 为 Quat(1,2,3,4) 与旋转前不变
实际结果
Quat {x: 0.6563156479251437, y: 0, z: 0, w: 0.3236432453668684}
经测试,似乎 cc.Quat.rotateX 方法 第一个参数 和 第二个参数 不能是同一个Quat,否则计算结果就会出错。
不确定类似的还有多少,感觉3D的向量计算的基础类,使用多少有些不方便,需要创建大量的临时变量。
建议:
是否可以延续Creator2的做法,所有计算都是影响自身?开发者去决定是否clone,这样至少逻辑上更清楚。
目前有的方法是影响自身,有的方法如rotateX又不能影响自身,很容易出问题。
非常抱歉,三个 rotate 函数的确有问题,1.1 会修复,急用的话参考这个 PR:
https://github.com/cocos-creator/engine/pull/6396
数学库公开接口有两套,成员函数和你的描述一致,统一只修改自己,而静态函数更灵活一些,统一传递 out 对象;