3d 使用OrbitControl在three.js中跟踪摄影机的总旋转(扭曲)

3d 使用OrbitControl在three.js中跟踪摄影机的总旋转(扭曲),3d,geometry,three.js,webgl,3d,Geometry,Three.js,Webgl,目前,我正在尝试跟踪用户在three.js中对场景进行y旋转的总量。我正在使用OrbitControl,并已将旋转固定到y轴。如果我将场景顺时针旋转3次全旋转,逆时针旋转1次全旋转,我想知道总旋转是顺时针720度 我的潜在解决方案包括在update()函数中跟踪camera.rotation.y值的更改。然而,camera.rotation.y的值在旋转中并不是简单地从0-2pi变为0,当我在一个圆中旋转时,它会从0变为pi/4,再变为-pi/4,再变为0,这意味着同一个值有两个不同的旋转位置。

目前,我正在尝试跟踪用户在three.js中对场景进行y旋转的总量。我正在使用OrbitControl,并已将旋转固定到y轴。如果我将场景顺时针旋转3次全旋转,逆时针旋转1次全旋转,我想知道总旋转是顺时针720度

我的潜在解决方案包括在update()函数中跟踪camera.rotation.y值的更改。然而,camera.rotation.y的值在旋转中并不是简单地从0-2pi变为0,当我在一个圆中旋转时,它会从0变为pi/4,再变为-pi/4,再变为0,这意味着同一个值有两个不同的旋转位置。这听起来像是一个四元数的行为,但camera.position似乎是一个Euler


关于这个问题的潜在解决方案有什么建议吗?如果有任何见解,我将不胜感激。

是的,three.js使用四元数。提供Euler等价物是为了方便用户,并且四元数到Euler的映射不是唯一的。这一次你必须带上你的思考帽。:-)OrbitControls正在调用rotateLeft/rotateRight。你可以跟踪输入到这个方法中的数量/角度,并以某种方式将其转换为总旋转数?嗯,也许我可以覆盖rotateLeft和rotateRight函数,并将它们封装在一些可以吐出变化的东西中。或者我将不得不使用xz坐标来计算角度,但听起来处理开销太大了。谢谢大家!