7

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

当 camera.rotate.y 处于 180 度时,camera.rotate.x 可预测地向上或向下看。

但是当我将 camera.rotate.y 的值更改为某个新值,然后更改 camera.rotate.x 的值时,地平线会旋转。

在更改 camera.rotate.x 后,我已经寻找一种算法来调整水平旋转,但还没有找到。

4

2 回答 2

17

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

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

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

因此,例如,如果在您指定的代码中,

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

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

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

有关欧拉角的更多信息,请参阅Wikipedia 文章。Three.js 遵循 Tait-Bryan 约定,如文章中所述。

三.js r.61

于 2013-07-08T01:39:32.540 回答
1

几天来我一直在寻找相同的信息,诀窍是:使用常规 rotateX 向上/向下查找,但rotateOnWorldAxis(new THREE.Vector3(0.0, 1.0, 0.0), angle)用于水平转弯(https://discourse.threejs.org/t/vertical-camera-rotation /15334)。

于 2021-06-06T06:45:32.627 回答