文章目錄
- 一,Cesium 實際示例(含源代碼)
- 1,vue+cesium: 圍繞一個固定點自動左右旋轉
- 2,vue+cesium: flyto一個具體的實體位置
- 3,vue+cesium: flyto一個具體的點位置
- 4,vue+cesium: 利用setView 動畫定位到特定點和特定區域
- 5,vue+cesium: lookAtTransform圍繞一個固定點上下左右旋轉查看
- 二,Camera基礎知識
- 1. Camera 基本概念
- 2. 常用操作方法
- (1)設置相機位置和方向
- (2)平滑飛行到目標位置
- (3)圍繞目標旋轉(視角控制)
- 3. 視錐體(Frustum)參數
- 4. 相機控制事件
- 5. 常用坐標轉換
- 6. 關鍵注意事項
- 三、Cesium 入門教程 -系列文章列表
Cesium 中的 Camera(相機)是控制場景視圖的核心組件,用于定義用戶在 3D 場景中的觀察位置、方向和視角。
一,Cesium 實際示例(含源代碼)
1,vue+cesium: 圍繞一個固定點自動左右旋轉
https://dajianshi.blog.csdn.net/article/details/131106456
2,vue+cesium: flyto一個具體的實體位置
https://dajianshi.blog.csdn.net/article/details/131080372
3,vue+cesium: flyto一個具體的點位置
https://dajianshi.blog.csdn.net/article/details/131073605
4,vue+cesium: 利用setView 動畫定位到特定點和特定區域
https://dajianshi.blog.csdn.net/article/details/145736119
5,vue+cesium: lookAtTransform圍繞一個固定點上下左右旋轉查看
https://dajianshi.blog.csdn.net/article/details/131106086
二,Camera基礎知識
1. Camera 基本概念
- 作用:決定場景中可見的區域,類似于現實世界中相機的取景范圍。
- 核心屬性:
position
:相機在三維空間中的位置(Cartesian3 坐標)。direction
:相機的觀察方向(單位向量)。up
:相機的上方向(單位向量,通常為 (0,0,1) 即垂直向上)。frustum
:視錐體參數(決定視野范圍、近/遠裁剪面等)。
2. 常用操作方法
(1)設置相機位置和方向
// 設置相機位置(WGS84經緯度:經度116°,緯度40°,高度1000米)
viewer.camera.setView({destination: Cesium.Cartesian3.fromDegrees(116, 40, 1000),orientation: {heading: Cesium.Math.toRadians(0), // 水平旋轉(0表示向北)pitch: Cesium.Math.toRadians(-30), // 俯仰角(-90°為俯視,0°為平視)roll: 0 // 翻滾角(0表示無傾斜)}
});
(2)平滑飛行到目標位置
// 平滑飛行到指定位置
viewer.camera.flyTo({destination: Cesium.Cartesian3.fromDegrees(116, 40, 5000), // 目標位置duration: 3, // 飛行時間(秒)orientation: {heading: Cesium.Math.toRadians(90), // 最終朝向(向東)pitch: Cesium.Math.toRadians(-45)}
});
(3)圍繞目標旋轉(視角控制)
// 圍繞某個點旋轉相機(例如圍繞一個地標)
const center = Cesium.Cartesian3.fromDegrees(116, 40); // 旋轉中心
viewer.camera.lookAt(center, new Cesium.Cartesian3(1000, 1000, 500) // 相機相對中心點的偏移量
);// 更新旋轉角度(例如鼠標拖動時)
viewer.camera.lookAtTransform(Cesium.Transforms.eastNorthUpToFixedFrame(center),new Cesium.Cartesian3(1000, 1000, 500)
);
3. 視錐體(Frustum)參數
視錐體定義了相機可見的空間范圍,常用參數:
fov
:垂直視野角度(Field of View),默認 60°。aspectRatio
:寬高比(場景寬度/高度)。near
:近裁剪面距離(小于此值的物體不可見)。far
:遠裁剪面距離(大于此值的物體不可見)。
// 自定義相機視錐體
viewer.camera.frustum.fov = Cesium.Math.toRadians(90); // 擴大視野到90°
viewer.camera.frustum.near = 1.0; // 近裁剪面1米
viewer.camera.frustum.far = 1000000.0; // 遠裁剪面1000公里
4. 相機控制事件
Cesium 提供了默認的相機交互(鼠標拖拽旋轉、滾輪縮放、右鍵平移),也可自定義事件:
// 禁用默認相機控制
viewer.scene.screenSpaceCameraController.enableRotate = false; // 禁用旋轉
viewer.scene.screenSpaceCameraController.enableZoom = false; // 禁用縮放// 監聽相機移動事件
viewer.camera.moveEnd.addEventListener(() => {console.log("相機移動結束,新位置:", viewer.camera.position);
});
5. 常用坐標轉換
相機位置通常需要在不同坐標系統間轉換:
// 笛卡爾坐標(Cartesian3)轉經緯度高度
const cartographic = Cesium.Cartographic.fromCartesian(viewer.camera.position);
const longitude = Cesium.Math.toDegrees(cartographic.longitude); // 經度
const latitude = Cesium.Math.toDegrees(cartographic.latitude); // 緯度
const height = cartographic.height; // 高度
6. 關鍵注意事項
- 性能影響:相機的
far
值過大會導致渲染性能下降,應根據場景需求合理設置。 - 視角限制:避免極端俯仰角(如接近 90°)可能導致的渲染異常。
- 動畫控制:
flyTo
方法可通過complete
回調處理飛行結束后的邏輯。
通過靈活控制 Camera,可實現漫游、聚焦、環繞等多樣化的場景瀏覽效果。
三、Cesium 入門教程 -系列文章列表
- Cesium 入門教程(一):應該如何學習Cesium
- Cesium 入門教程(二):界面的基礎配置
- Cesium 入門教程(三):加載不同的地圖底圖
- Cesium 入門教程(四):利用entity顯示圖形
- Cesium 入門教程(五):利用Primitive生成圖形
- Cesium 入門教程(六):不同的材質設置
- Cesium 入門教程(七):加載、導出2D文件數據
- Cesium 入門教程(八):加載3D瓦片及模型
- Cesium 入門教程(九):通過鼠標繪制圖形
- Cesium 入門教程(十):利用shader、后處理重構圖形
- Cesium 入門教程(十一):camera相機功能展示
- Cesium 入門教程(十二):時間動畫實例
- Cesium 入門教程(十三):粒子系統實例
- Cesium 入門教程(十四):鼠標鍵盤交互