cesium单向流动线效果

在学材质的路上一去不复返了属实是,难也难在这
在这里插入图片描述
材质代码如下

export class CustomMaterial{
    constructor(data){
        this.date = new Date().valueOf()+Math.random()
        Cesium.Material._materialCache.addMaterial("CustomMaterial" + this.date,{
            fabric: {
                type: 'test',
                uniforms: {
                    speed: 8,
                    repeat: 1,
                    color: Cesium.Color.fromCssColorString(data.color), // 线段颜色
                    flowColor: Cesium.Color.fromCssColorString(data.flowColor), // 流光颜色
                    flowSpeed: 0.01, // 流光速度
                    flowIntensity: 1.0, // 流光强度
                    startTime: Math.random(),
                    percent: 0.1,
                    gradient: 0.01
                },
                source: /* glsl */ `
                    uniform vec4 color;
                    uniform float speed;
                    uniform float percent;
                    uniform float gradient;
                    uniform vec4 flowColor;
                    uniform float repeat;
                    czm_material czm_getMaterial(czm_materialInput materialInput){
                      czm_material material = czm_getDefaultMaterial(materialInput);//获取默认的材质
                      vec2 st = materialInput.st;//用作每个材质的czm_getMaterial函数的输入 st(2D纹理坐标)
                      float t =fract(czm_frameNumber * speed / 1000.0); //fract获取小数位 1/x的余数
                      t *= (1.0 + percent);
                      float alpha = smoothstep(t- percent, t, st.s) * step(-t, -st.s);//smoothstep能够输出平滑过渡的阈值函数
                      alpha += gradient;
                      float offset = fract(st.s*repeat - t);
                      vec4 ackColor = mix(color, flowColor, smoothstep(t- percent, t, st.s) * step(-t, -st.s));
                      material.diffuse = ackColor.rgb;
                      material.alpha = ackColor.a;
                      return material;
                    }
                    `
            }
        })
    }
    // 获取当前的材质类型,因为是新定义的材质
    getType(){
        return 'CustomMaterial' + this.date
    }
    // 获取cesium 中的时间,uniforms的属性
    getValue(time,result){
        // 获取到程序运行时长
        // result.uTime= performance.now()/1000;
        return result
    }
}

使用代码

viewer.entities.add({
                id: valueList[i].id + valueList[i + 1].id + data.type,
                properties: data,
                disableDepthTestDistance: Number.POSITIVE_INFINITY,
                polyline: {
                    positions: Cesium.Cartesian3.fromDegreesArrayHeights(),
                    width: 1,
                    material: material,
                    disableDepthTestDistance: Number.POSITIVE_INFINITY,
                    clampToGround:  false, //贴地  开启贴地不会被地形遮蔽,
                },
            })

还请各位大佬多多指教~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

cesium小菜王

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

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

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

打赏作者

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

抵扣说明:

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

余额充值