查阅资料及网上文章,其实想实现绕点旋转就是通过修改heading的值来实现的。
实现思路:
相机绕点旋转,即相机指向中心点不变,不断更改heading
属性即可,使用Camera
类的lookAt
方法,API:传送门
具体代码:
1、 核心代码
export default class AroundPoint {
constructor(viewer, amount, position,height) {
this._viewer = viewer;
this._amount = amount;
this._position = position;
this._height = height;
}
_bindEvent() {
this._viewer.clock.onTick.addEventListener(this._aroundPoint, this);
}
_unbindEvent() {
this._viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
this._viewer.clock.onTick.removeEventListener(this._aroundPoint, this);
}
start() {
this._viewer.clock.shouldAnimate = true;
this._unbindEvent();
this._bindEvent();
return this;
}
stop() {
this._unbindEvent();
return this;
}
// 相机绕点旋转函数
_aroundPoint() {
let heading = this._viewer.camera.heading;
let pitch = this._viewer.camera.pitch;
if (heading >= Math.PI * 2 || heading <= -Math.PI * 2) {
heading = 0;
} else {
heading += Cesium.Math.toRadians(this._amount);
}
this._viewer.camera.lookAt(
this._position,
new Cesium.HeadingPitchRange(
heading,
pitch,
this._height,
)
)
}
}
2、页面调用
let aroundPoint = new AroundPoint(viewer, 0.2, new Cesium.Cartesian3.fromDegrees(103.62416890925606, 28.782654034074834, 1300),1000.0);
aroundPoint.start();