Cesium入門8 - Configuring the Scene - 配置視窗
Cesium入門8 - Configuring the Scene - 配置視窗
Cesium中文網:http://cesiumcn.org/ | 國內快速訪問:http://cesium.coinidea.com/
接下來將新增一些更多的正確的時間和空間設定到Viewer中。涉及到與viewer.scene進行互動,該類控制了viewer中的所有圖形元素。
- 首先,我們配置一下我們的scene,用以下程式碼啟用基於太陽位置的光照:
// Enable lighting based on sun/moon positions viewer.scene.globe.enableLighting = true;
按照以上配置,我們scene(場景)中的光照將會隨著每天時間的變化而變化。如果你zoom out,你就會看到一部分數字地球位於黑暗之中,因為模擬真實的地球,太陽只能照射到地球的一部分。
- 在我們開始初始化啟動view之前,我們先簡略的過一下一些基礎的Cesium型別:
- Cartesian3 : 一個三維笛卡爾座標——當它被用作相對於地球中心的位置時,使用地球固定框架(ECEF)。
- Cartographic : 由經度、緯度(弧度)和WGS84橢球面高度確定的位置。
- HeadingPitchRoll : 在東北向上的框架中關於區域性軸的旋轉(弧度)。航向是圍繞負Z軸的旋轉。俯仰是圍繞負Y軸的旋轉。滾動是關於正X軸的旋轉。
- Quaternion :以4D座標表示的3D旋轉。
這些是在場景中定位和定位Cesium objects所必需的基本型別,並且有許多有用的轉換方法。請參閱每種型別的文件以瞭解更多資訊。
現在讓我們把相機定位在我們資料所在的NYC(紐約)的場景中。
Camera Control
相機是viewer.scene中的屬性,用來控制當前可見的域。我們可以通過直接設定它的位置和方向來控制相機,或者通過使用Cesium提供的API來控制相機,它被設計成指定相機的位置和方向隨時間的變化。
一些最常用的方法如下:
- Camera.setView(options): 在特定位置和方向立即設定相機。
- Camera.zoomIn(amount): 沿著視角向量移動攝像機。
- Camera.zoomOut(amount): 沿視角向量向後移動攝像機。
- Camera.flyTo(options): 建立從當前相機位置到新位置的動畫相機飛行。
- Camera.lookAt(target, offset) : 定位並定位攝像機以給定偏移量瞄準目標點。
- Camera.move(direction, amount) : 朝任何方向移動攝像機。
- Camera.rotate(axis, angle) : 繞任意軸旋轉相機。
進一步獲得API功能,看看這些相機演示:
讓我們嘗試一種方法將相機跳轉到紐約。使用camera.setView()初始化view,使用Cartesian3和HeadingpitchRoll指定相機的位置和方向:
// Create an initial camera view
var initialPosition = new Cesium.Cartesian3.fromDegrees(-73.998114468289017509, 40.674512895646692812, 2631.082799425431);
var initialOrientation = new Cesium.HeadingPitchRoll.fromDegrees(7.1077496389876024807, -31.987223091598949054, 0.025883251314954971306);
var homeCameraView = {
destination : initialPosition,
orientation : {
heading : initialOrientation.heading,
pitch : initialOrientation.pitch,
roll : initialOrientation.roll
}
};
// Set the initial view
viewer.scene.camera.setView(homeCameraView);
相機現在被定位和定向以俯瞰曼哈頓,並且我們的檢視引數被儲存在一個物件中,我們可以將其傳遞給其他相機方法。
實際上,我們可以使用這個相同的視角來更新按下home按鈕的效果。我們不必讓它從遠處返回地球的預設視角,我們可以重寫按鈕,使我們看到曼哈頓的初始視角。我們可以通過新增幾個選項來調整動畫,然後新增一個取消預設航班的事件偵聽器,並呼叫FlyTo()我們的Home視角:
// Add some camera flight animation options
homeCameraView.duration = 2.0;
homeCameraView.maximumHeight = 2000;
homeCameraView.pitchAdjustHeight = 2000;
homeCameraView.endTransform = Cesium.Matrix4.IDENTITY;
// Override the default home button
viewer.homeButton.viewModel.command.beforeExecute.addEventListener(function (e) {
e.cancel = true;
viewer.scene.camera.flyTo(homeCameraView);
});
更多關於基本相機控制,請訪問我們的Camera Tutorial。
Clock Control
接下來,我們配置viewer的Clock和Timline來控制scene的時間進度。
這裡是clock的相關API
當使用特定時間時,Cesium使用JulandDATE型別,它儲存了1月1日中午以來的天數-4712(公元前4713年)。為了提高精度,該類將日期和秒的全部部分儲存在單獨的元件中。為了計算安全和代表跳躍秒,日期總是儲存在國際原子時間標準中。
下面是我們如何設定場景時間選項的例子:
// Set up clock and timeline.
viewer.clock.shouldAnimate = true; // make the animation play when the viewer starts
viewer.clock.startTime = Cesium.JulianDate.fromIso8601("2017-07-11T16:00:00Z");
viewer.clock.stopTime = Cesium.JulianDate.fromIso8601("2017-07-11T16:20:00Z");
viewer.clock.currentTime = Cesium.JulianDate.fromIso8601("2017-07-11T16:00:00Z");
viewer.clock.multiplier = 2; // sets a speedup
viewer.clock.clockStep = Cesium.ClockStep.SYSTEM_CLOCK_MULTIPLIER; // tick computation mode
viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP; // loop at the end
viewer.timeline.zoomTo(viewer.clock.startTime, viewer.clock.stopTime); // set visible range
這設定場景動畫的速率、開始和停止時間,並告訴時鐘在到達停止時間時迴圈回到開始。它還將時間線控制元件設定為適當的時間範圍。看看這個時鐘示例程式碼來測試時鐘設定。
這是我們的初始場景配置!現在,當你執行你的應用程式時,你應該看到以下內容:
Cesium中文網交流QQ群:807482793
Cesium中文網:http://cesiumcn.org/ | 國內快速訪問:http://cesium.coinidea.com/