cesium实现地球自转效果


Cesium实战系列文章总目录传送门

1.实现效果

在这里插入图片描述

2.实现方法

2.1官方参考

参考官方Camera中lookAtTransform方法的API:传送门
使用变换矩阵和偏移量来更新相机的位置。
在这里插入图片描述

2.2具体实现

2.2.1核心代码

具体核心代码globeRotate.js如下:

/*
 * @Description: 地球自转效果
 * @Version: 1.0
 * @Author: Julian
 * @Date: 2022-02-25 15:14:20
 * @LastEditors: Julian
 * @LastEditTime: 2022-02-26 12:18:03
 */


/**
 * @description: 地球自转类
 */
class GlobeRotate {
    constructor(viewer) {
        this._viewer = viewer;
    }

    // 根据国际天体参考系计算旋转矩阵
    _icrf() {
        if (this._viewer.scene.mode !== Cesium.SceneMode.SCENE3D) {
            return ture;
        }
        console.log(this._viewer.camera.position);
        let icrfToFixed = Cesium.Transforms.computeIcrfToFixedMatrix(this._viewer.clock.currentTime);
        if (icrfToFixed) {
            let camera = this._viewer.camera;
            let offset = Cesium.Cartesian3.clone(camera.position);
            let transform = Cesium.Matrix4.fromRotationTranslation(icrfToFixed);
            // 偏移相机,否则会场景旋转而地球不转
            camera.lookAtTransform(transform, offset);
        }
    }

    // 绑定事件
    _bindEvent() {
    	// 转动的速度设置
        this._viewer.clock.multiplier = 15 * 1000;
        // 初始化为单位矩阵
        this._viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
        this._viewer.scene.postUpdate.addEventListener(this._icrf, this);
    }

    // 解除绑定
    _unbindEvent() {
        this._viewer.clock.multiplier = 1;
        this._viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
        this._viewer.scene.postUpdate.removeEventListener(this._icrf, this);
    }

    // 开始旋转
    start() {
        this._viewer.clock.shouldAnimate = true;
        this._unbindEvent();
        this._bindEvent();
        return this;
    }

    // 停止旋转
    stop() {
        this._unbindEvent();
        return this;
    }
}
2.2.2调用方法

(1)首先引入js文件。

 <!-- 引入地球自转js -->
 <script src="./demo/globeRotate/globeRotate.js"></script>

(2)具体调用代码:

// 地球球体自转
let globeRotate = new GlobeRotate(viewer);
globeRotate.start();
  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Cesium是一个用于创建地球、地图和空间可视化的开源JavaScript库。要设置地球自转,可以使用Cesium提供的`Clock`对象和`ClockViewModel`对象来控制时间和动画效果。 首先,你需要创建一个`Clock`对象来管理时间。`Clock`对象包含了当前时间、速度和是否暂停等属性。你可以通过设置`Clock.currentTime`属性来改变当前时间。 然后,你可以创建一个`ClockViewModel`对象来控制动画效果。`ClockViewModel`对象提供了一些方便的方法和属性来控制时间的流逝和动画的播放。你可以通过设置`ClockViewModel.clock`属性来关联到之前创建的`Clock`对象。 接下来,你可以使用Cesium的实体对象(例如`Entity`)来表示地球,并设置其旋转角度。你可以通过设置实体对象的`orientation`属性来实现地球自转。例如,你可以使用`Quaternion`对象来表示旋转角度,并将其赋值给实体对象的`orientation`属性。 最后,你需要在Cesium的场景中添加这个实体对象,并启动Cesium的渲染循环,让地球开始自转。 下面是一个示例代码,展示了如何使用Cesium设置地球自转: ```javascript // 创建一个Clock对象 var clock = new Cesium.Clock(); // 创建一个ClockViewModel对象,并关联到Clock对象 var clockViewModel = new Cesium.ClockViewModel(clock); // 创建一个实体对象表示地球 var earthEntity = new Cesium.Entity({ name: 'Earth', position: Cesium.Cartesian3.fromDegrees(0, 0, 0), orientation: Cesium.Quaternion.IDENTITY, // 初始旋转角度为单位四元数 model: { uri: 'path/to/earth/model' // 地球模型的路径 } }); // 将实体对象添加到场景中 viewer.scene.primitives.add(earthEntity); // 启动Cesium的渲染循环 viewer.clockViewModel = clockViewModel; viewer.clock.shouldAnimate = true; ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

右弦GISer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值