From dddf622d95f00d17113d87481d9569a7b0f94d04 Mon Sep 17 00:00:00 2001 From: fukunee Date: Sat, 19 Sep 2026 13:27:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=87=E8=AE=B0=E4=BE=BF=E7=AD=BE=E5=9C=A8?= =?UTF-8?q?=E5=9C=B0=E5=B9=B3=E7=BA=BF=E9=99=84=E8=BF=91=E6=B8=90=E5=8F=98?= =?UTF-8?q?=E6=B7=A1=E5=87=BA=EF=BC=8C=E4=BF=AE=E5=A4=8D=E6=8B=96=E6=8B=BD?= =?UTF-8?q?=E9=97=AA=E7=83=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/scene/CesiumGlobe.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/scene/CesiumGlobe.js b/src/scene/CesiumGlobe.js index 6b84ef6..597f721 100644 --- a/src/scene/CesiumGlobe.js +++ b/src/scene/CesiumGlobe.js @@ -321,12 +321,19 @@ export class CesiumGlobe { const win = Cesium.SceneTransforms.worldToWindowCoordinates(scene, m.position); if (!win) { el.style.display = 'none'; continue; } - // 背面(远半球)隐藏:dot(P, C) <= |P|² 时为背对地球 + // 前/后半球判断 + 地平线附近渐变淡出(固定 ~3° 渐变带,避免拖拽时闪烁/突隐) const dotPC = Cesium.Cartesian3.dot(m.position, camera.positionWC); - const r2 = Cesium.Cartesian3.magnitudeSquared(m.position); - if (dotPC <= r2) { el.style.display = 'none'; continue; } + const pMag = Math.sqrt(Cesium.Cartesian3.magnitudeSquared(m.position)); + const cMag = Cesium.Cartesian3.magnitude(camera.positionWC); + const cosPhi = dotPC / (pMag * cMag); + const phi = Math.acos(Math.max(-1, Math.min(1, cosPhi))); + const phiHorizon = Math.acos(Math.max(-1, Math.min(1, pMag / cMag))); + const margin = phiHorizon - phi; // > 0 为前半球 + if (margin <= 0) { el.style.display = 'none'; continue; } + const opacity = Math.min(1, margin / 0.05); // 0.05 rad ≈ 3° el.style.display = 'block'; + el.style.opacity = String(opacity); el.style.left = `${win.x}px`; el.style.top = `${win.y}px`; }