Cesium 中阻止镜头飞至地表以下
Cesium 镜头飞至地表下后会看到破损的地表,影响用户体验,github上有人给出了解决方法,记录如下:
- github 问题讨论地址
- 代码:
var viewer = new Cesium.Viewer('cesiumContainer');
var minPitch = -Cesium.Math.PI_OVER_TWO;
var maxPitch = 0;
var minHeight = 200;
viewer.camera.changed.addEventListener(
function() {
if (viewer.camera._suspendTerrainAdjustment && viewer.scene.mode === Cesium.SceneMode.SCENE3D) {
viewer.camera._suspendTerrainAdjustment = false;
viewer.camera._adjustHeightForTerrain();
}
// Keep camera in a reasonable pitch range
var pitch = viewer.camera.pitch;
if (pitch > maxPitch || pitch < minPitch) {
viewer.scene.screenSpaceCameraController.enableTilt = false;
// clamp the pitch
if(pitch > maxPitch ) {
pitch = maxPitch;
} else if(pitch < minPitch) {
pitch = minPitch;
}
var destination = Cesium.Cartesian3.fromRadians(
viewer.camera.positionCartographic.longitude,
viewer.camera.positionCartographic.latitude,
Math.max(viewer.camera.positionCartographic.height, minHeight));
viewer.camera.setView({
destination: destination,
orientation: { pitch: pitch }
});
viewer.scene.screenSpaceCameraController.enableTilt = true;
}
}
);