Three.js相机上下倾斜并保持水平

camera.rotate.y以可预测的方式向左或向右平移。

当camera.rotate.y在180度时,camera.rotate.x可以预测地查看或者下载。

但是当我把camera.rotate.y的值改成一些新的值,然后我改变camera.rotate.x的值,水平旋转。

我找了一个algorithm来调整camera.rotate.x改变后的水平旋转,但没有find它。

在three.js中,可以通过其欧拉旋转vectorobject.rotation来指定对象的方向。 旋转vector的三个分量分别表示围绕对象的内部x轴,y轴和z轴的弧度旋转。

旋转的执行顺序由object.rotation.order指定。 默认顺序是“XYZ” – 围绕x轴的旋转首先发生,然后是y轴,然后是z轴。

旋转是相对于对象的内部坐标系而不是世界坐标系来执行的。 这个很重要。 因此,例如,在发生x旋转之后,对象的y轴和z轴通常不再与世界坐标轴alignment。 以这种方式指定的旋转不是唯一的。

所以,例如,如果在您指定的代码中,

 camera.rotation.y = y_radians; // Y first camera.rotation.x = x_radians; // X second camera.rotation.z = 0; 

旋转应用在对象的rotation.order ,而不是按照您指定的顺序。

在你的情况下,你可能会发现把rotation.order设置为“YXZ”更直观,这相当于“航向,俯仰和滚转”。

有关欧拉angular的更多信息,请参阅维基百科文章 。 正如文章中所解释的那样,Three.js遵循Tait-Bryan公约。

three.js r.61