Настройка камеры для видимой формы Three.js

У меня есть CubeGeometry, на которую смотрит камера, и я хочу, чтобы камера увеличивала масштаб, чтобы куб был полностью виден, но не больше.

Моей первоначальной попыткой было преобразовать вершины куба в систему координат камеры

function toScreenXY(position, camera) {
  var pos = position.clone();
  var projScreenMat = new THREE.Matrix4();
  projScreenMat.multiply(camera.projectionMatrix, camera.matrixWorldInverse);
  projScreenMat.multiplyVector3( pos );

  return pos;
}
function ScaleInView() {
  camera.fov = 0.0;
  for (var i=0; i<8; i++) {
    proj2d = toScreenXY(cube.geometry.vertices[i],camera);
    angle = 57.296 * Math.max(Math.atan(proj2d.x/proj2d.z), Math.atan(proj2d.y/proj2d.z));
    camera.fov = Math.max(camera.fov,angle);
  }
  camera.updateProjectionMatrix();
}

. Я думал, что это сработает, но иногда он слишком мал, а иногда слишком велик (в зависимости от положения камеры ).

Мне также нужно сделать это для Orthographic Camera.

Изменить: Я знаю, как это сделать, когда куб смотрит в камеру, ищу способ сделать это, когда камера перемещается в некоторые произвольные (r, theta, phi )position (сферические полярные координаты ; r на самом деле константа для моих целей ).

6
задан gman 8 October 2013 в 21:38
поделиться