右键环视球心改为地形表面点,统一视觉中心与旋转中心
This commit is contained in:
@@ -386,12 +386,18 @@ export class CesiumGlobe {
|
|||||||
handler.setInputAction((movement) => {
|
handler.setInputAction((movement) => {
|
||||||
// 旋转中心 = 相机当前注视的屏幕中心点(与原生 tilt 一致),
|
// 旋转中心 = 相机当前注视的屏幕中心点(与原生 tilt 一致),
|
||||||
// 而不是点击点:用点击点会导致一拖动就“瞬移”到点击处。
|
// 而不是点击点:用点击点会导致一拖动就“瞬移”到点击处。
|
||||||
|
// 取“地形表面”点而不是椭球点:相机看到的是地形,若用椭球点做球心,
|
||||||
|
// 视觉中心(地形)会随旋转漂移,产生“两套体系”的错觉。
|
||||||
const canvas = scene.canvas;
|
const canvas = scene.canvas;
|
||||||
const center = Cesium.Cartesian2.fromElements(
|
const center = Cesium.Cartesian2.fromElements(
|
||||||
canvas.clientWidth / 2,
|
canvas.clientWidth / 2,
|
||||||
canvas.clientHeight / 2,
|
canvas.clientHeight / 2,
|
||||||
);
|
);
|
||||||
const pivot = camera.pickEllipsoid(center, scene.globe.ellipsoid);
|
const ray = camera.getPickRay(center);
|
||||||
|
let pivot = scene.globe.pick(ray, scene);
|
||||||
|
if (!Cesium.defined(pivot)) {
|
||||||
|
pivot = camera.pickEllipsoid(center, scene.globe.ellipsoid);
|
||||||
|
}
|
||||||
if (!Cesium.defined(pivot)) return;
|
if (!Cesium.defined(pivot)) return;
|
||||||
const sc = this._orbitScratch;
|
const sc = this._orbitScratch;
|
||||||
const offset = Cesium.Cartesian3.subtract(camera.position, pivot, sc.offset);
|
const offset = Cesium.Cartesian3.subtract(camera.position, pivot, sc.offset);
|
||||||
|
|||||||
Reference in New Issue
Block a user