Cesium(5):基于callbackproperty做洪水淹没三维动态分析

1 版本 

 

cesium 1.92.0


2 实现原理

2.1 水面材质

选择一个水面波纹的短视频纹理,作为水面的材质:

videoMaterial: function (url) {
    // "data/other/water.mp4"
    let video = document.createElement('video');
    video.src = url;
    video.autoplay = true;
    video.loop = true;
    let material = new Cesium.ImageMaterialProperty({
        image: video,
        repeat: new Cesium.Cartesian2(5.0, 5.0),
        transparent: true,
        color: Cesium.Color.WHITE.withAlpha(0.5)
    });
    return material;
}

2.2 水深的涨跌原理

水深的动态涨跌主要是利用了Cesium的Property机制。Property最大的特点是和时间相互关联,在不同的时间可以动态地返回不同的属性值,而Entity则可以感知这些Property的变化,在不同的时间驱动物体进行动态展示。

水深的模拟主要采用的是CallbackProperty类,其值由回调函数延迟计算。也就是说它在不断地自我调用,每当返回的对象有改变,就抛出改编后的值。每当接收到新的当前站内累计积水深度,便刷新一次当前累计积水深度与上次累计积水深度之间的差值以及相应的时间差,利用CallbackProperty回调函数延迟机制,随之时间变化动态修改积水深度的当前拉伸高度,即可实现站内积水三维动态渲染。实现的代码如下所示:

// rainData:表示不同的时刻及对应的水深的数组对象
// sumWD:水深值
let i = 0, ratio = 0, interval = 7, exag = 3.5;
let extrudedHeight = new Cesium.CallbackProperty(function (time, result) {
    let timeSpan = Cesium.JulianDate.secondsDifference(time, startTime);
    if (i <= 0) {
        result = height;
        ratio = rainData[i].sumWD * exag / interval;
    } else {
        result = height + rainData[i - 1].sumWD * exag;
        ratio = (rainData[i].sumWD * exag - rainData[i - 1].sumWD * exag) / interval;
    }
    result += timeSpan * ratio;
    if (timeSpan > interval) {
        startTime = time;
        if (i + 1 >= rainData.length) {
            i = 0;
        } else {
            i = i + 1;
        }
    }
    return result;
}, false)

3 三维效果

最终实现的三维动态渲染效果如下图所示:

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

碰碰qaq

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

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

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

打赏作者

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

抵扣说明:

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

余额充值