Camera Zoom To Fit Object

Ortho camera solution that worked for me.

export const fitCameraToCenteredObject = (
  camera: THREE.OrthographicCamera,
  object: any
) => {
  const boundingBox = new THREE.Box3();

  boundingBox.setFromObject(object);

  const center = boundingBox.getCenter(new THREE.Vector3());
  const size = boundingBox.getSize(new THREE.Vector3());
  const maxSize = Math.max(size.x, size.y, size.z);
  let newPositionCamera = new THREE.Vector3(maxSize, maxSize, maxSize);
  camera.zoom = 1;
  camera.left = -(2 * maxSize);
  camera.bottom = -(2 * maxSize);
  camera.top = 2 * maxSize;
  camera.right = 2 * maxSize;
  camera.near = -maxSize * 4;
  camera.far = maxSize * 4;
  // camera;
  camera.position.set(
    newPositionCamera.x,
    newPositionCamera.y,
    newPositionCamera.z
  );
  camera.lookAt(0, 0, 0);
  camera.updateProjectionMatrix();
};

1 Like