cesium 雷达扫描

主要是Primitive,然后自定义Material;

    const primitive = new Cesium.Primitive({
      geometryInstances: new Cesium.GeometryInstance({
        geometry: new Cesium.EllipseGeometry({
          center: Cesium.Cartesian3.fromDegrees(120.09777, 30.03883),
          semiMajorAxis: 100000.0,
          semiMinorAxis: 100000.0,
        }),
      }),
      appearance: new Cesium.EllipsoidSurfaceAppearance({
        material: new Cesium.Material({
          fabric: {
            type: 'mym',
            uniforms: {
              color: new Cesium.Color(0.1804, 0.9725, 0.0745, 0.5), // 颜色
              radians: 0, // 旋转
              width: 0.01 // 线条宽度
            },
            source: `  
            czm_material czm_getMaterial(czm_materialInput materialInput)
            {
                czm_material material = czm_getDefaultMaterial(materialInput);
                vec2 st = materialInput.st;
                float rx = st.x - 0.5;
                float ry = st.y - 0.5;
                float current_radians = atan(ry, rx);
                float radius = sqrt(rx * rx + ry * ry);
                current_radians = current_radians - radians;
                st = vec2(cos(current_radians) * radius, sin(current_radians) * radius);
                st = vec2(st.x + 0.5, st.y + 0.5);
                float time = czm_frameNumber / 60.0;
                float dis = distance(st, vec2(0.5));
                vec3 diffuse = color.rgb;
                float alpha = 1.0;
                if(abs(st.y - st.x) < width && st.x > 0.5){ // 动线
                  alpha = 1.0;
                } else if (st.y-st.x < 0.0 && st.y-st.x < 0.32 && st.x > 0.5 && st.y > 0.5) { // 动线后面的渐变区
                  alpha = 1.0 - fract(abs(st.y-st.x)* 1.2) - 0.4 ;
                } else {
                  alpha = 0.0;
                }
                // 根据到圆心到距离画圆
                if(dis < 0.1 - width){
                  // alpha = 0.0;
                } else if(dis < 0.1){
                  alpha = 1.0;
                } else if(dis < 0.3 - width){
                  // alpha = 0.0;
                } else if(dis < 0.3){
                  alpha = 1.0;
                } else if(dis < 0.5 - width){
                  // alpha = 0.0;
                } else if(dis < 0.5){
                  alpha = 1.0;
                }

                material.diffuse = diffuse;
                material.alpha = alpha;
                return material;
            }
            `,
          },
        }),
      }),
    });
    this.viewer.scene.primitives.add(primitive);
    // 持续旋转
    let radians = 0;
    viewer.scene.preUpdate.addEventListener(() => {
      radians += Math.PI / 90;
      primitive.appearance.material.uniforms.radians = radians;
    });

旋转部分参考:https://blog.csdn.net/qq_32685139/article/details/103354213

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值