Установка положения камеры и угла обзора вручную с помощью элементов управления трекбола (THREEJS)

Я установил position и fov моего perspective camera вручную в THREE.JS. Он ведет себя так, как ожидалось. Однако, когда я позже пытаюсь взаимодействовать с scene через TrackBall Controls, он просто отображает черный экран, без ошибок.

JS Fiddle

Соответствующий код:

var bbox = new THREE.Box3().setFromObject(scene);
var center = bbox.getCenter();
var size = bbox.getSize();

// update some controls properties
controls.target.set(center.x, center.y, center.z);

// position the camera  on the y axis
camera.position.set(center.x, center.y - size.y, center.z);

// fit FOV
var dist = size.y / 2;
var fov = 2 * Math.atan( size.z / ( 2 * dist ) ) * ( 180 / Math.PI );

camera.fov = fov;

camera.updateProjectionMatrix();

Какой шаг мне не хватает, чтобы иметь возможность правильно взаимодействовать с scene

Спасибо

==== РЕДАКТИРОВАТЬ

Рабочая скрипка на основе принятого ответа: Fiddle


person Nicolas    schedule 11.05.2017    source источник


Ответы (1)


Я думаю, что невозможно правильно спроецировать случай, когда положение камеры «вверху» параллельно вектору, определяемому положением камеры и целью. Положение камеры вверху должно указывать, как ориентировать вид в плоскости, ортогональной вектору от положения камеры до цели, но если компонент camera.up вдоль этой плоскости равен нулю, это не может работать. В вашем коде:

  • положение камеры «вверху» по умолчанию (0,1,0)
  • вектор от положения камеры до цели камеры равен (0,size.y,0)

Самое простое исправление, вероятно, состоит в том, чтобы указать другую камеру «вверху», т.е.

camera.up = new THREE.Vector3(0,0,1.);

или любой другой вектор, не параллельный направлению y.

person Franz    schedule 11.05.2017
comment
Спасибо! Добавил новый файл в вопрос с ответом - - person Nicolas; 12.05.2017