美文网首页
Cesium自定义材质

Cesium自定义材质

作者: zhuyx0304 | 来源:发表于2024-06-16 08:54 被阅读0次

自定义材质雷达扫描

const shaderSource = `
  uniform vec4 color;
  uniform vec4 sectorColor;
  uniform float width;
  uniform float radians;
  uniform float offset;
  
  czm_material czm_getMaterial(czm_materialInput materialInput)
  {
      czm_material material = czm_getDefaultMaterial(materialInput);
      vec2 st = materialInput.st;
      float dis = distance(st, vec2(0.5));
  
      float sp = 1.0 / 5.0 / 2.0;
      float m = mod(dis, sp);
      float alpha = step(sp * (1.0 - width * 10.0), m);
      alpha = clamp(alpha, 0.2, 1.0);
      material.alpha = alpha;
      material.diffuse = color.rgb;
      
      // 绘制十字线
      if ((st.s > 0.5 - width / 2.0 && st.s < 0.5 + width / 2.0) || (st.t > 0.5 - width / 2.0 && st.t < 0.5 + width / 2.0)) {
          alpha = 1.0;
          material.diffuse = color.rgb;
          material.alpha = alpha;
      }
      
      // 绘制光晕
      float ma = mod(dis + offset, 0.5);
      if (ma < 0.25){
          alpha = ma * 3.0 + alpha;
      } else{
          alpha = 3.0 * (0.5 - ma) + alpha;
      }                           
      material.alpha = alpha;
      material.diffuse = sectorColor.rgb;
  
      // 绘制扇区
      vec2 xy = materialInput.st;
      float rx = xy.x - 0.5;
      float ry = xy.y - 0.5;
      float at = atan(ry, rx);
      // 半径
      float radius = sqrt(rx * rx + ry * ry);
      // 扇区叠加旋转角度
      float current_radians = at + radians;
      xy = vec2(cos(current_radians) * radius, sin(current_radians) * radius);
      xy = vec2(xy.x + 0.5, xy.y + 0.5);
  
      // 扇区渐变色渲染
      if (xy.y - xy.x < 0.0 && xy.x > 0.5 && xy.y > 0.5){
          material.alpha = alpha + 0.2;
          material.diffuse = sectorColor.rgb;
      }
  
      return material;
  }
`



class RadarScanCircleMaterial extends Material {
  constructor(params) {
    const options = {
      fabric: {
        type: "RadarScanCircleMaterial",
        uniforms: {
          color: new Cesium.Color(0.0, 1.0, 0.0, 0.5),
          sectorColor: new Cesium.Color(0.0, 1.0, 0.0, 0.5),
          radians: params.radians || Math.PI * 3 / 8,
          offset: 0.2,
          width: 0.01,
        },
        source: shaderSource,
      },
      translucent: true,
    }
    super(options);
  }

  update() {
    this.uniforms.radians = this.uniforms.radians + 0.01;
  }
}

调用

const position = Cesium.Cartesian3.fromDegrees(116.410018,39.916706);
            const modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);

            const instance = new Cesium.GeometryInstance({
              geometry : new Cesium.EllipseGeometry({
                  center : position,
                  semiMinorAxis : 500000.0,
                  semiMajorAxis : 500000.0,                  
              }),
              id : 'object returned when this instance is picked and to get/set per-instance attributes'
            });

            const material = new RadarScanCircleMaterial({
              color: 'rgb(0,255,50)',
              sectorColor: 'rgb(0,255,50)',
              radians: Math.PI * 3 / 8,
              offset: 0.2
            });
viewer.scene.primitives.add(new Cesium.Primitive({
              geometryInstances : instance,
              appearance : new Cesium.EllipsoidSurfaceAppearance({
                // material : material,
                material : material2,
                flat: false,
                faceForward: false,
                translucent: true,
                closed: false,
              }),
              asynchronous: false,
              // modelMatrix: modelMatrix
            }));

相关文章

  • Cesium飞线

    在学习Cesium过程中,发现Cesium的Material可以自定义自己所需的材质,看到网上其他资源有实现城市飞...

  • Cesium自定义材质

    材质是用于描述多边形、折线、椭球等对象的外观特征,材质可以是几何对象表面的任一一种着色,可以是贴在其表面的一张图片...

  • cesium编程入门(八)设置材质

    cesium编程入门(八)设置材质 Cesium中为几何形状设置材质有多种方法 第一种方法 Material 直接...

  • cesium流动材质应用特效

    采用vue+cesium实现 引入js部分 importCesiumfrom"cesium/Cesium"; ex...

  • cesium自定义气泡窗口infoWindow

    一、自定义气泡窗口与cesium默认窗口效果对比:1.cesium点击弹出气泡窗口显示的位置固定在地图的右上角,默...

  • Cesium开发高级篇 | 02材质设置

    无论是通过Entity类,还是通过Primitive类添加的空间几何数据,Cesium都提供了对应的方法或材质相关...

  • Cesium实现视频影像融合

    视频影像融合 cesium中可以将video标签作为材质赋予实体,实体贴地后会覆盖模型表面,达到视频影像融合的效果...

  • Primitive篇(贴图)

    前几篇博客我们了解了自定义点、线、面绘制,这篇我们接着学习cesium自定义纹理贴图。我们完成点线面的绘制,只是绘...

  • Cesium1.87+ 实现建筑泛光效果

    代码 Cesium 1.87+增加了customShader自定义着色器,实现建筑泛光效果示例代码如下: 效果

  • Cesium官方教程12--材质(Fabric)

    原文地址:https://github.com/AnalyticalGraphicsInc/cesium/wiki...

网友评论

      本文标题:Cesium自定义材质

      本文链接:https://www.haomeiwen.com/subject/baqsqjtx.html