Cesium 实现地球自转效果

准备知识:

Cesium里实现地球自转,第一想到的是每次渲染前移动相机位置。这个位置怎么求?

Cesium里由两个基本坐标系,惯性坐标系和地固坐标系,不了解的可以搜搜其他文章,这里不详细描述。简单就是惯性系的坐标轴方向是不变的,而地固系是随地球自转而转动的。

明白这个就好说了,实现自转其实这里相机位置可以认为在惯性系里是不变的,我们只需求出每个时刻惯性到地固的转换矩阵,就能知道相机位置每时刻在地固中的变化。Cesium本身transform中有地固和惯性坐标系转换的矩阵,输入是JulianDate。(注意,该方法需要加载一些计算用到的资源,所以没加载资源前调用会返回undefined)。

编码就简单啦

vue下:(这里我引入cesium的方式不同,cesium需用this.Cesium调用,有全局引入的直接调Cesium就行)

调用方法

startRun (option = { multiplier: 1 }) {
      let viewer = window.earth // 创建cesium的viewer
       // 监听每次渲染前执行矩阵求解
      viewer.scene.postUpdate.addEventListener(this.rotateSetting) 
      // 根据option修改一些参数
      if (viewer.clock) {
        const keys = Object.keys(option)
        for 
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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; ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值