소스 검색

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 개월 전
부모
커밋
012f0fd137
4개의 변경된 파일5개의 추가작업 그리고 39개의 파일을 삭제
  1. 0 0
      dist/assets/index-BAPGHJTI.js
  2. 0 0
      dist/assets/index-DlQvLY-H.css
  3. 2 2
      dist/index.html
  4. 3 37
      src/components/TerrainViewer.vue

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 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()

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.