标记便签在地平线附近渐变淡出,修复拖拽闪烁
This commit is contained in:
@@ -321,12 +321,19 @@ export class CesiumGlobe {
|
|||||||
const win = Cesium.SceneTransforms.worldToWindowCoordinates(scene, m.position);
|
const win = Cesium.SceneTransforms.worldToWindowCoordinates(scene, m.position);
|
||||||
if (!win) { el.style.display = 'none'; continue; }
|
if (!win) { el.style.display = 'none'; continue; }
|
||||||
|
|
||||||
// 背面(远半球)隐藏:dot(P, C) <= |P|² 时为背对地球
|
// 前/后半球判断 + 地平线附近渐变淡出(固定 ~3° 渐变带,避免拖拽时闪烁/突隐)
|
||||||
const dotPC = Cesium.Cartesian3.dot(m.position, camera.positionWC);
|
const dotPC = Cesium.Cartesian3.dot(m.position, camera.positionWC);
|
||||||
const r2 = Cesium.Cartesian3.magnitudeSquared(m.position);
|
const pMag = Math.sqrt(Cesium.Cartesian3.magnitudeSquared(m.position));
|
||||||
if (dotPC <= r2) { el.style.display = 'none'; continue; }
|
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.display = 'block';
|
||||||
|
el.style.opacity = String(opacity);
|
||||||
el.style.left = `${win.x}px`;
|
el.style.left = `${win.x}px`;
|
||||||
el.style.top = `${win.y}px`;
|
el.style.top = `${win.y}px`;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user