标记便签:加缩放距离限制并修复背面可见问题

This commit is contained in:
2026-09-19 02:28:21 +08:00
parent fade9eedc2
commit 2687e5fd95
+10 -6
View File
@@ -271,17 +271,21 @@ export class CesiumGlobe {
_updateMarkerLayer() {
const scene = this.viewer.scene;
const camera = scene.camera;
const toPos = new Cesium.Cartesian3();
const outOfRange = camera.positionCartographic.height > 1e7; // 最远 1 万 km 内显示
for (const m of this.markers) {
const el = m.el;
if (!el) continue;
if (outOfRange) { el.style.display = 'none'; continue; }
const win = Cesium.SceneTransforms.worldToWindowCoordinates(scene, m.position);
if (!win) { el.style.display = 'none'; continue; }
Cesium.Cartesian3.subtract(m.position, camera.positionWC, toPos);
if (Cesium.Cartesian3.dot(toPos, camera.directionWC) < 0) {
el.style.display = 'none'; // 背对相机不显示
continue;
}
// 背面(远半球)隐藏:dot(P, C) <= |P|² 时为背对地球
const dotPC = Cesium.Cartesian3.dot(m.position, camera.positionWC);
const r2 = Cesium.Cartesian3.magnitudeSquared(m.position);
if (dotPC <= r2) { el.style.display = 'none'; continue; }
el.style.display = 'block';
el.style.left = `${win.x}px`;
el.style.top = `${win.y}px`;