Cesium自定义动画

在Cesium中,我想做一个半径动态增大和缩小的圆。一开始我考虑使用requestAnimationFrame,不断的调整半径的大小,也就是直接更改Ellipsoid对象的长短轴大小。但是效果不理想,半径调整后这个圆会消失,然后出现调整之后的圆,给人的感觉就是“卡顿”。

直到我看到了这篇文章 Cesium的Property机制总结, 完整了这个功能。

效果图

在这里插入图片描述

实现原理

  1. 动态圆
    semiMinorAxissemiMajorAxis指定一个CallbackProperty对象,并返回半径大小。由于要做的是要给圆,长短轴相同,可以抽出一个共同的方法getRadius()。 在CallbackProperty的回调函数中,不断的调整半径的大小,这个就和我们平时常用的requestAnimationFrame一样了。

  2. 颜色渐变
    使用ColorMaterialProperty,根据半径的大小,调整透明度。半径越大,透明度越高。

源码


  	var r = 0,
      up = true

    const pos = Cesium.Cartesian3.fromDegrees(120.191, 30.255, 100)

    const maxRadius = 50
    const minRadius = 10
    const step = 1

    function getRadius() {
      return new Cesium.CallbackProperty(function (time, result) {
        if (up) {
          r += step
        } else {
          r -= step
        }

        if (r >= maxRadius) {
          up = false
        }

        if (r <= minRadius) {
          up = true
        }
        return r
      }, false)
    }

    viewer.entities.add({
      position: pos,
      ellipse: {
        semiMinorAxis: getRadius(),
        semiMajorAxis: getRadius(),
        material: new Cesium.ColorMaterialProperty(
          new Cesium.CallbackProperty(function (time, result) {
            return new Cesium.Color(1, 0, 0, 1 - r / maxRadius)
          })
        ),
        height: this.target[2],
        outline: false
      }
    })

其他

如果你还有什么问题:

  1. 查看 Cesium的Property机制总结,这个对动画的描述很全面。
  2. 在评论区发言,我会尽量提供我所知道的答案。
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Cesium是一个用于创建三维地球和空间场景的JavaScript库,它提供了许多内置的动画效果和工具,可以实现各种类型的动画效果。以下是一些实现动画效果的方法: 1. 通过改变实体属性来实现动画效果,如位置、旋转、大小等。可以使用Cesium的Tween库或自己编写动画函数来控制实体的属性值,从而实现动画效果。 2. 使用Cesium的时间线,将动画效果分解为一系列关键帧,然后在时间线上逐帧展示动画效果。可以使用Cesium的Timeline控件来控制动画的播放。 3. 使用Cesium动画路径插值功能,将动画效果定义为一个路径,在路径上逐步移动实体。可以使用Cesium的SampledPositionProperty类来定义路径,并使用Cesium的PathVisualizer类来展示路径上的实体移动效果。 4. 使用Cesium的粒子系统,通过控制粒子的位置、大小、颜色等属性来创建各种复杂的动画效果,如火花、雨滴、爆炸等。 总之,Cesium提供了多种实现动画效果的方法,开发者可以根据具体需求选择合适的方法来实现动画效果。 ### 回答2: Cesium是一个开源的JavaScript库,可用于在浏览器中创建高性能的3D地球和地理空间可视化应用程序。要实现动画效果,可以通过以下几种方法: 1. 实时变换:通过改变Cesium实体的位置、方向和大小来创建动画效果。可以使用Cesium的实体(Entity)对象来表示要进行动画的物体,然后使用Tween.js等动画库来实时调整实体的属性,实现平滑的动画效果。 2. 时间轴动画Cesium提供了时间轴(Timeline)组件,可以控制时间的流逝,从而创建动画效果。可以使用Timeline组件来设置动画的开始时间、结束时间和持续时间,并在每个时间点上更新实体的属性,以达到想要的动画效果。 3. 插值动画Cesium提供了插值器(Interpolator)对象,可以在两个属性之间插值,从而创建平滑的动画效果。可以使用插值器对象来设置属性的起始值和目标值,然后在每一帧上通过插值器对象计算当前值,以实现属性值的平滑过渡。 4. 图片序列动画Cesium支持加载图片序列,可以将一系列图片按照一定的帧率进行播放,从而创建动画效果。可以使用Cesium的图片序列(ImageSequence)对象来加载图片序列,然后在每一帧上更新实体的贴图,以实现动画效果。 通过以上方法,可以利用Cesium强大的功能和灵活的API,实现各种动画效果,使得地球和地理空间可视化应用程序更加生动和具有交互性。 ### 回答3: Cesium是一个开源的地理信息系统软件开发工具包,它可以在网页浏览器中呈现地球、卫星图像、地理位置等数据。为了实现动画效果,可以使用Cesium提供的动画功能和API。 首先,可以使用Cesium提供的Clock对象来控制时间。Clock对象中包含了当前时间、时钟的状态和一些控制时间的方法。通过设置时钟的启动时间、速度和当前时间,可以实现动态的时间效果。 其次,Cesium提供了多种插值算法和缓动函数,可以在属性之间创建平滑的过渡动画效果。例如,可以通过设置动画的起始值和结束值,根据时间的流逝逐渐过渡到目标值,从而实现平滑的动画效果。 此外,Cesium还提供了一些内置动画效果,如飞行模拟动画、地形浏览动画等。这些内置动画效果可以直接调用,而无需自己编写复杂的代码。 最后,Cesium还支持与其他动画库和框架进行集成。例如,可以将Cesium与GreenSock Animation Platform (GSAP) 结合使用,以实现更复杂和丰富的动画效果。 总之,要实现动画效果,可以利用Cesium提供的时钟、插值算法和缓动函数,自定义动画属性的过渡效果,或直接调用内置的动画效果。同时,还可以结合其他动画库来实现更高级的动画效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值