Camera表示觀察場景的視角。通過操作攝像機,可以控制視圖的位置、方向和角度。
幫助文檔:Camera - Cesium Documentation
1 setView
setView 方法允許你指定相機的目標位置和姿態。你可以通過 Cartesian3 對象來指定目標位置,并通過 orientation 對象來設置相機的航向、俯仰和翻滾角。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>相機</title><script src="../../libs/Cesium/Cesium.js"></script><link href="../../libs/Cesium/Widgets/widgets.css" rel="stylesheet"><style>html,body {margin: 0px;padding: 0px;}</style>
</head>
<body><div id="puiedu-cesiumContainer"></div><script>Cesium.Ion.defaultAccessToken = '你的key';const viewer = new Cesium.Viewer('puiedu-cesiumContainer');const position = Cesium.Cartesian3.fromDegrees(116.39,39.91,400);viewer.camera.setView({destination:position,orientation:{heading:Cesium.Math.toRadians(0),pitch:Cesium.Math.toRadians(-90),roll:0}})</script>
</body>
</html>
destination:接受兩種類型,一個是Cartesian3,我們這里用鼠標點擊獲取到經緯度之后,轉換成笛卡爾坐標系傳遞。另一個類型是Rectangle,這個我們在下邊講解。
orientation(歐拉角):調整相機視角方向的;它有3個參數:heading、pitch、roll
- heading 值為 0 時,指向正北方,隨著數值變大,順時針旋轉(模型左右擺動),航向角,代表飛機的航向。
- pitch 值為 0 時,相機前后保持水平,改變數值(模型上下擺動),負值時俯視,負得越大,越向下俯視,正值時仰視,正得越大,越向上仰視,這就是為什么用-180°-180°的角度范圍,而不是0°-360°,很方便記憶和理解,俯仰角,俯(向下)為負,仰(向上)為正。
- roll 值為 0 時,相機左右保持水平,改變數值(模型左右擺動),roll和pitch的表現類似,只是將前后變成了左右,左為負,右為正,用-180°-180°也很方便記憶和理解。
duration:飛行時間,單位秒;
您可以修改控件上的值,然后看每個值被修改后,相機是如何變化的,您會得出以下結論。
效果如下:
2 flyTo
flyTo 方法會讓相機以動畫的方式飛到指定的位置,你可以設置飛行時間和其他動畫參數。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>相機</title><script src="../../libs/Cesium/Cesium.js"></script><link href="../../libs/Cesium/Widgets/widgets.css" rel="stylesheet"><style>html,body {margin: 0px;padding: 0px;}</style>
</head>
<body><div id="puiedu-cesiumContainer"></div><script>Cesium.Ion.defaultAccessToken = '你的key';const viewer = new Cesium.Viewer('puiedu-cesiumContainer');const position = Cesium.Cartesian3.fromDegrees(116.39,39.91,400);viewer.camera.flyTo({destination:position,orientation: {heading: Cesium.Math.toRadians(0),pitch: Cesium.Math.toRadians(-90),roll: 0},duration:5,})</script>
</body>
</html>
這里的參數和setView中的一致,這里就不講解了。
效果如下:
啟動后,會發現相機通過飛行的方式到底制定位置。
3 lookAt
lookAt 方法允許相機以某個位置為中心來確定位置和姿態。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>相機</title><script src="../../libs/Cesium/Cesium.js"></script><link href="../../libs/Cesium/Widgets/widgets.css" rel="stylesheet"><style>html,body {margin: 0px;padding: 0px;}</style>
</head>
<body><div id="puiedu-cesiumContainer"></div><script>Cesium.Ion.defaultAccessToken = '你的key';const viewer = new Cesium.Viewer('puiedu-cesiumContainer');const center = Cesium.Cartesian3.fromDegrees(116.39,39.91);const heading = Cesium.Math.toRadians(50);const pitch = Cesium.Math.toRadians(-90);const range = 2500;viewer.camera.lookAt(center, new Cesium.HeadingPitchRange(heading,pitch,range));</script>
</body>
</html>
效果如下:
4?viewBoundingSphere
它的視角切換效果也是和setView方法一樣,沒有飛行過渡效果,直接切換視口到指定目的地。優點是可以指定玩目標點后,可以從多個角度更好的觀測。
代碼如下:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>相機</title><script src="../../libs/Cesium/Cesium.js"></script><link href="../../libs/Cesium/Widgets/widgets.css" rel="stylesheet"><style>html,body {margin: 0px;padding: 0px;}</style>
</head>
<body><div id="puiedu-cesiumContainer"></div><script>Cesium.Ion.defaultAccessToken = '你的key';const viewer = new Cesium.Viewer('puiedu-cesiumContainer');const position = Cesium.Cartesian3.fromDegrees(116.39,39.91,1500);var orientation = Cesium.Transforms.headingPitchRollQuaternion(position, new Cesium.HeadingPitchRoll(-90,0,0));var entity = viewer.entities.add({position:position,orientation:orientation,model:{uri:"../../libs/models/Cesium_Air.glb",minimumPixelSize:100,maximumScale:10000,show:true}});viewer.camera.viewBoundingSphere(new Cesium.BoundingSphere(position,20),new Cesium.HeadingPitchRange(0,0,0));</script>
</body>
</html>
效果如下:
無論如何移動相機的視角都是綁定在飛機模型上的,由此發現,當我們需要對一個物體進行多角度觀測時,或者建筑物進行定點漫游時,我們就需要viewBoundingSphere方法。