Подтвердить что ты не робот

Перемещение камеры, просмотр и поворот в файле three.js

У меня возникли проблемы с пониманием lookAt и поворотов камеры.

У меня есть окружность малых сфер вокруг [0,0,0] на плоскости x-y.

Камера помещается в [0,0,30], а после просмотра поворачивается камера [0,0,0]. Круг выглядит как будто смотрит сверху (как и ожидалось).

Затем я перемещаю камеру на [30,0,0] и после просмотра поворачивается камера [0,90deg, 0]. Круг появляется на боку, но вертикально, а не горизонтально, как я ожидал. Почему камера поворачивается на 90 градусов для y?

После этого я перемещаю фотокамеру на [0,30,0] и после просмотра. Вращение камеры составляет [-90deg, 0,90deg]. Круг снова появляется на боку, вертикально, а не горизонтально.

Почему камера вращается? Я думал, что вращение вообще не будет, поскольку оно было на самих осях x и y.

Спасибо за любую помощь!: -)

Примечание: Первоначально опубликовано в https://github.com/mrdoob/three.js/issues/2917, но было сказано, чтобы он перешел в Stack Overflow.

4b9b3361

Ответ 1

Чтобы устранить проблему, вы можете указать вектор вверх для камеры перед выполнением команды lookAt().

// Place camera on x axis
camera.position.set(30,0,0);
camera.up = new THREE.Vector3(0,0,1);
camera.lookAt(new THREE.Vector3(0,0,0));

Измените вектор на ваши потребности. Вы можете даже перевернуть его вверх дном, указав отрицательное значение: (0,0, -1). Важно установить вектор up перед использованием lookAt().

Я создал полный пример в http://jsfiddle.net/VsWb9/991/ с двумя кубами. Меньший должен быть сверху большого (на положительной оси z).