Cesium Vue(六)— 材质(Material)

1. 设置entity材质

  • 添加棋盘纹理材质

    js 复制代码
    // 棋盘纹理
    let material = new Cesium.CheckerboardMaterialProperty({
    evenColor: Cesium.Color.RED,
    oddColor: Cesium.Color.YELLOW,
    repeat: new Cesium.Cartesian2(2, 2),
    });
  • 添加条纹纹理材质

    js 复制代码
    // 条纹纹理
    let material = new Cesium.StripeMaterialProperty({
    evenColor: Cesium.Color.WHITE,
    oddColor: Cesium.Color.YELLOW,
     repeat: 8,
    });
  • 添加网格纹理材质

    js 复制代码
    // 网格纹理
    let material = new Cesium.GridMaterialProperty({
    color: Cesium.Color.YELLOW,
    cellAlpha: 0.2,
    lineCount: new Cesium.Cartesian2(4, 4),
    lineThickness: new Cesium.Cartesian2(4.0, 4.0),
    });
  • 添加虚线材质

    js 复制代码
    // 设置虚线材质
    let material = new Cesium.PolylineDashMaterialProperty({
        dashLength: 30,
        color: Cesium.Color.RED,
    });
  • 设置箭头材质

    js 复制代码
    let material = new Cesium.PolylineArrowMaterialProperty(Cesium.Color.RED);
  • 设置发光飞线效果

    js 复制代码
    let material = new Cesium.PolylineGlowMaterialProperty({
        // 设置发光程度
        glowPower: 0.8,
        // 尾椎缩小程度
        taperPower: 0.7,
        color: Cesium.Color.RED,
    });

2. 编写着色器自定义材质

js 复制代码
// 编写着色器修改材质
 // https://cesium.com/downloads/cesiumjs/releases/b28/Documentation/
 let material1 = new Cesium.Material({
   fabric: {
     uniforms: {
       uTime: 0,
     },
     source: `
       czm_material czm_getMaterial(czm_materialInput materialInput)
       {
         // 生成默认的基础材质
         czm_material material = czm_getDefaultMaterial(materialInput);
         // material.diffuse = vec3(materialInput.st+uTime, 0.0);
         float strength = mod((materialInput.s-uTime) * 10.0, 1.0);
         material.diffuse = vec3(strength, 0.0, 0.0);
         return material;
       }
     `,
   },
 });

 //添加补间动画
 gsap.to(material1.uniforms, {
   uTime: 1,
   duration: 2,
   repeat: -1,
   ease: "linear",
 });
 // 图元
 let primitive = new Cesium.Primitive({
   geometryInstances: [instance, instance2],
   appearance: appearance,
   show: true,
 });
 // 添加到viewer
 viewer.scene.primitives.add(primitive);

3. Appearance编写着色器修改外观

js 复制代码
 let appearance = new Cesium.EllipsoidSurfaceAppearance({
   fragmentShaderSource: `
   in vec3 v_positionMC;
   in vec3 v_positionEC;
   in vec2 v_st;
   uniform float uTime;

   void main(void)
   {
       czm_materialInput materialInput;

       out_FragColor = vec4(v_st,uTime, 1.0);
   }
   `,
 });
 console.log(appearance);
 appearance.uniforms = {
   uTime: 0,
 };

 gsap.to(appearance.uniforms, {
   uTime: 1,
   duration: 2,
   repeat: -1,
   yoyo: true,
   ease: "linear",
 });

 // 04-图元
 let primitive = new Cesium.Primitive({
   geometryInstances: [instance, instance2],
   appearance: appearance,
 });

4. 自定义materialProperty材质

js 复制代码
//创建自定义材质
  class CustomMaterialPropery {
    constructor() {
      this.definitionChanged = new Cesium.Event();
      Cesium.Material._materialCache.addMaterial("CustomMaterial", {
        fabric: {
          type: "CustomMaterial",
          uniforms: {
            uTime: 0,
          },
          source: `
          czm_material czm_getMaterial(czm_materialInput materialInput)
          {
            // 生成默认的基础材质
            czm_material material = czm_getDefaultMaterial(materialInput);
            material.diffuse = vec3(materialInput.st, uTime);
            return material;
          }

          `,
        },
      });

      this.params = {
        uTime: 0,
      };
      gsap.to(this.params, {
        uTime: 1,
        duration: 2,
        repeat: -1,
        yoyo: true,
      });
    }
    getType() {
      // 返回材质类型
      return "CustomMaterial";
    }
    getValue(time, result) {
      result.uTime = this.params.uTime;
      // 返回材质值
      return result;
    }
  }

  let material = new CustomMaterialPropery();
相关推荐
hanchenxing13 分钟前
自动化脚本“卡住无输出“怎么办: 一次 WebSocket 挂死的排查与自愈模板
运维·javascript·chrome·websocket·自动化·自动化爬虫
津津有味道40 分钟前
Web网页写网址到424DNA标签Javascrip源码
javascript·nfc·424dna·写网址·加密提交
梨涡泥窝2 小时前
JavaWeb——基于 Spring Boot + Vue 的图书管理系统的设计与实现
vue.js·spring boot·后端
宁风2 小时前
JavaScript:函数体系-1
前端·javascript
oooo_z3 小时前
美股历史K线数据API接口选型指南:iTick覆盖1分钟到月线全周期
服务器·前端·javascript
mONESY3 小时前
LangChain 结构化输出三兄弟:ToolCall、OutputParser、withStructuredOutput 彻底讲透
javascript
知兀3 小时前
【前端】受控和非受控组件
前端·javascript·react
晴天164 小时前
JavaScript 与 Java 垃圾回收机制对比
java·开发语言·javascript
huali4 小时前
vue-split-screen:让 Vue Router 的导航轨迹变成两个页面
前端·javascript·vue.js
bug总结4 小时前
uniapp总结
开发语言·前端·javascript