From de8bb9d3738c4cf57423e50c0ef22b95d62a7cfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Tue, 22 Sep 2026 13:17:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=96=E6=99=AF=E8=BF=91=E8=BF=9C=E8=A3=81?= =?UTF-8?q?=E5=89=AA=E9=9D=A2=E6=AF=94=E4=BE=8B=E6=94=B9=E4=B8=BA=E5=85=B7?= =?UTF-8?q?=E5=90=8D=E5=B8=B8=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - packages/model3d-viewer/src/framing.ts:把 near / far 推导里内联的 1/1000 与 10 提成 NEAR_DISTANCE_RATIO / FAR_DISTANCE_RATIO,与同文件其它比例常量口径一致,取值不变 验证:npx vitest run packages/model3d-viewer(19 用例全绿) --- packages/model3d-viewer/src/framing.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) 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),