Эх сурвалжийг харах

refactor(TerrainViewer): remove auto rotate feature and adjust camera limits

1. remove the auto rotate functionality including related functions and cleanup code
2. remove the global autoRotateListener variable
3. set camera zoom distance limits to unrestricted
wenhongquan 1 сар өмнө
parent
commit
012f0fd137

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/index-BAPGHJTI.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/index-DlQvLY-H.css


+ 2 - 2
dist/index.html

@@ -7,8 +7,8 @@
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <title>3D 大屏 - 倾斜摄影</title>
-    <script type="module" crossorigin src="/assets/index-C2YiRZLg.js"></script>
-    <link rel="stylesheet" crossorigin href="/assets/index-jcAtfv53.css">
+    <script type="module" crossorigin src="/assets/index-BAPGHJTI.js"></script>
+    <link rel="stylesheet" crossorigin href="/assets/index-DlQvLY-H.css">
   </head>
   <body>
     <div id="app"></div>

+ 3 - 37
src/components/TerrainViewer.vue

@@ -37,7 +37,6 @@ let elevations = null
 let markerEntities = []
 let handler = null
 let removePostRender = null
-let autoRotateListener = null
 
 // 计算地形经纬度范围
 function computeTerrainRectangle() {
@@ -278,6 +277,9 @@ async function initViewer() {
 
   viewer.scene.globe.depthTestAgainstTerrain = true
   viewer.scene.globe.enableLighting = false
+  // 解除相机缩放距离限制
+  viewer.scene.screenSpaceCameraController.minimumZoomDistance = 0
+  viewer.scene.screenSpaceCameraController.maximumZoomDistance = Number.POSITIVE_INFINITY
   // 将背景与 globe 底色设为深蓝灰,避免瓦片缺失/加载延迟时露出纯黑
   const fillColor = Cesium.Color.fromCssColorString('#1a2634')
   viewer.scene.backgroundColor = fillColor
@@ -329,38 +331,6 @@ function resetCamera() {
   setupCamera()
 }
 
-function startAutoRotate() {
-  if (isAutoRotating.value || !viewer || !meta) return
-  isAutoRotating.value = true
-
-  const rect = computeTerrainRectangle()
-  const eRange = (meta.elevationMax - meta.elevationMin) * veModel.value
-  const targetHeight = meta.elevationMin + eRange * props.cameraTargetY
-  const center = Cesium.Cartesian3.fromDegrees(
-    Cesium.Math.toDegrees(Cesium.Rectangle.center(rect).longitude),
-    Cesium.Math.toDegrees(Cesium.Rectangle.center(rect).latitude),
-    targetHeight
-  )
-  const distance = Math.max(meta.terrainWidthMeters, meta.terrainDepthMeters) * props.cameraDistance
-  const pitch = Cesium.Math.toRadians(-props.cameraPitch)
-  let heading = Cesium.Math.toRadians(props.cameraYaw)
-
-  autoRotateListener = viewer.clock.onTick.addEventListener(() => {
-    if (!isAutoRotating.value) return
-    heading += Cesium.Math.toRadians(0.1)
-    viewer.camera.lookAt(center, new Cesium.HeadingPitchRange(heading, pitch, distance))
-    viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY)
-  })
-}
-
-function stopAutoRotate() {
-  isAutoRotating.value = false
-  if (autoRotateListener) {
-    autoRotateListener()
-    autoRotateListener = null
-  }
-}
-
 // 获取标记点 exaggeration 后的地表高度
 function getMarkerSurfaceHeight(lon, lat) {
   const lonMin = meta.dsmLonMin
@@ -560,9 +530,6 @@ async function loadAll() {
 
     await initViewer()
     loading.value = false
-    
-    // 加载完成后启动旋转动效
-    startAutoRotate()
   } catch (err) {
     console.error('加载失败:', err)
     error.value = '加载失败: ' + (err.message || err)
@@ -597,7 +564,6 @@ window.addEventListener('resize', onResize)
 onUnmounted(() => {
   window.removeEventListener('message', handleIframeMessage)
   window.removeEventListener('resize', onResize)
-  stopAutoRotate()
   if (removePostRender) removePostRender()
   if (handler) handler.destroy()
   if (viewer) viewer.destroy()

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно