Перемещение камеры, просмотр и поворот в файле 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.
Ответы
Ответ 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).