fix: center world orbit rotation on view
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled

This commit is contained in:
Your Name 2026-04-10 13:30:16 +08:00
parent 27d44b3b77
commit 240b367acd

View File

@ -85,8 +85,6 @@ const DEFAULT_MESH_SETTINGS: Model3DViewerSettings = {
wireframe: false,
};
const WORLD_ORBIT_TARGET = new THREE.Vector3(0, 0, 0);
const EMPTY_MOVEMENT_STATE: MovementState = {
forward: false,
backward: false,
@ -307,7 +305,6 @@ function positionCameraInsideWorld({
const cameraPosition = anchor
.clone()
.addScaledVector(horizontalAxis, Math.max(majorSpan * 0.12, 0.65));
const targetPosition = WORLD_ORBIT_TARGET.clone();
cameraPosition.x = THREE.MathUtils.clamp(
cameraPosition.x,
@ -319,6 +316,13 @@ function positionCameraInsideWorld({
worldBounds.min.z + marginZ,
worldBounds.max.z - marginZ
);
const lookDirection = anchor.clone().sub(cameraPosition).normalize();
const anchorDistance = cameraPosition.distanceTo(anchor);
const targetPosition = cameraPosition
.clone()
.addScaledVector(lookDirection, THREE.MathUtils.clamp(anchorDistance * 0.8, 0.55, 1.2));
camera.position.copy(cameraPosition);
camera.lookAt(targetPosition);
camera.updateProjectionMatrix();