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();
相关推荐
梵得儿SHI2 分钟前
Vue 高级特性:组件高级用法(动态组件、异步组件、组件缓存 keep-alive)
前端·javascript·vue.js·keep-alive·异步组件·动态组件·vue组件高级特性
lili-felicity8 分钟前
React Native for Harmony 数字验证码输入功能
javascript·react native·react.js
ℋᙚᵐⁱᒻᵉ鲸落9 分钟前
【Vue3】Element Plus 表单显示自定义校验错误
前端·javascript·vue.js
lili-felicity12 分钟前
React Native for Harmony:消息列表页面未读标记完整实现
javascript·react native·react.js
切糕师学AI12 分钟前
Vue 中的响应式布局
前端·javascript·vue.js
晷龙烬17 分钟前
Vue组件使用三步走:创建、注册、使用(Vue2/Vue3双版本详解)
前端·javascript·vue.js
2501_9481226321 分钟前
React Native for OpenHarmony 实战:Steam 资讯 App 设置页面
javascript·react native·react.js·游戏·ecmascript·harmonyos
2501_9481226322 分钟前
React Native for OpenHarmony 实战:Steam 资讯 App 意见反馈实现
javascript·react native·react.js·游戏·ecmascript·harmonyos
是罐装可乐25 分钟前
前端架构知识体系:深入理解 sessionStorage、opener 与浏览器会话模型
开发语言·前端·javascript·promise·语法糖
2501_9445210026 分钟前
rn_for_openharmony商城项目app实战-账号安全实现
javascript·数据库·安全·react native·react.js·ecmascript