diff --git a/src/scene/CesiumGlobe.js b/src/scene/CesiumGlobe.js index f437405..1970982 100644 --- a/src/scene/CesiumGlobe.js +++ b/src/scene/CesiumGlobe.js @@ -400,7 +400,7 @@ export class CesiumGlobe { viewer.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK); } - // 右键原生 tilt:按下记录相机状态;松开不回正。中键:回正(flyTo 动画飞回按下前状态) + // 右键原生 tilt:按下记录位置;松开不回正。中键:回正到“不倾斜不旋转”(天底 + 北朝上) _setupRightRestore() { const scene = this.viewer.scene; const camera = this.viewer.camera; @@ -409,11 +409,7 @@ export class CesiumGlobe { handler.setInputAction(() => { camera.cancelFlight(); // 取消可能仍在进行的回正动画 - this._rightHome = { - position: Cesium.Cartesian3.clone(camera.position), - direction: Cesium.Cartesian3.clone(camera.direction), - up: Cesium.Cartesian3.clone(camera.up), - }; + this._rightHome = Cesium.Cartesian3.clone(camera.position); }, Cesium.ScreenSpaceEventType.RIGHT_DOWN); handler.setInputAction(() => { @@ -423,13 +419,13 @@ export class CesiumGlobe { }, Cesium.ScreenSpaceEventType.RIGHT_UP); handler.setInputAction(() => { - // 中键:回正(动画飞回) + // 中键:回正(天底 + 北朝上,保持原注视点) if (!this._rightHome) return; - const s = this._rightHome; + const pos = this._rightHome; this._rightHome = null; camera.flyTo({ - destination: s.position, - orientation: { direction: s.direction, up: s.up }, + destination: pos, + orientation: { heading: 0, pitch: Cesium.Math.toRadians(-90), roll: 0 }, duration: 0.5, }); }, Cesium.ScreenSpaceEventType.MIDDLE_DOWN);