UNPKG

studiocms

Version:

Astro Native CMS for AstroDB. Built from the ground up by the Astro community.

27 lines (26 loc) 995 B
import { Box3, Vector3 } from "three"; function fitModelToViewport(model, camera, threeModules) { const ThreeBox3 = threeModules?.Box3 || Box3; const ThreeVector3 = threeModules?.Vector3 || Vector3; if (typeof model.updateWorldMatrix === "function") { model.updateWorldMatrix(true, true); } else if (typeof model.updateMatrixWorld === "function") { model.updateMatrixWorld(true); } const box = new ThreeBox3().setFromObject(model); const center = box.getCenter(new ThreeVector3()); const size = box.getSize(new ThreeVector3()); model.position.x += model.position.x - center.x; model.position.y += model.position.y - center.y; model.position.z += model.position.z - center.z; const maxDim = Math.max(size.x, size.y, size.z); const fov = camera.fov * (Math.PI / 180); let cameraZ = Math.abs(maxDim / 2 / Math.tan(fov / 2)); cameraZ *= 2.5; camera.position.z = cameraZ; camera.updateProjectionMatrix(); return cameraZ; } export { fitModelToViewport };