Skip to content
章节导航

初始化模型视角

便于每次进入不同模型的时候,视角是最佳状况,不需要重新设置摄像头的位置

js
/**
 * @description: 初始化模型视角 便于查看模型
 * @param {*} model 传入一个模型
 * @param {*} orbit 传入场景的轨道控制器
 */
export function modelToCamera(model, orbit) {
  const modelBox = new THREE.Box3().setFromObject(model);
  const mdlen = modelBox.max.x - modelBox.min.x;
  const mdhei = modelBox.max.y - modelBox.min.y;
  const mdwid = modelBox.max.z - modelBox.min.z;
  const x1 = modelBox.min.x + mdlen / 2;
  const y1 = modelBox.min.y + mdhei / 2;
  const z1 = modelBox.min.z + mdwid / 2;

  model.position.set(-x1, -y1, -z1); // 将模型原点归零

  const diagonal = Math.sqrt(Math.sqrt(mdlen ** 2 + mdwid ** 2) ** 2 + mdhei ** 2);

  orbit.object.position.set(diagonal, mdhei + diagonal, diagonal); // 设置相机位置
  orbit.target.set(0, 0, 0); // 设置相机的视角方向,看向模型的中心点
  orbit.update(); // 更新相机
  orbit.object.far = 2 * diagonal > 100000 ? 2 * diagonal : 100000;
  orbit.object.near = 1;
  orbit.object.updateProjectionMatrix();
}