diff --git a/packages/model3d-viewer/src/framing.ts b/packages/model3d-viewer/src/framing.ts index 94a129e67..a9c35d926 100644 --- a/packages/model3d-viewer/src/framing.ts +++ b/packages/model3d-viewer/src/framing.ts @@ -10,6 +10,10 @@ const FALLBACK_RADIUS = 1; const FALLBACK_ASPECT = 1; const NEAR_RADIUS_RATIO = 0.01; const FAR_RADIUS_RATIO = 12; +/** 近裁剪面离相机的距离比例:模型很小时按 1/1000 距离兜底,避免近处被裁。 */ +const NEAR_DISTANCE_RATIO = 1 / 1000; +/** 远裁剪面离相机的距离比例:模型很扁时按 10 倍距离兜底,避免远处被裁。 */ +const FAR_DISTANCE_RATIO = 10; const MIN_DISTANCE_RATIO = 0.2; const MAX_DISTANCE_RATIO = 8; /** 复位视角仰角:过度抬高会把「上轴投影范围」放大,导致模型看起来比目标比例小。 */ @@ -240,8 +244,11 @@ export function computeModel3dViewerFraming( center: computeModel3dViewerBoxCenter(input.box), radius, distance, - near: Math.max(radius * NEAR_RADIUS_RATIO, distance / 1000), - far: Math.max(distance + radius * FAR_RADIUS_RATIO, distance * 10), + near: Math.max(radius * NEAR_RADIUS_RATIO, distance * NEAR_DISTANCE_RATIO), + far: Math.max( + distance + radius * FAR_RADIUS_RATIO, + distance * FAR_DISTANCE_RATIO, + ), minDistance: radius * MIN_DISTANCE_RATIO, maxDistance: distance * MAX_DISTANCE_RATIO, resetDirection: resolveModel3dViewerResetDirection(input.direction),