Cesium学习笔记(16)

428 阅读1分钟

使用MaterialProperty设置Entity的材质

  //创建一个自定义MaterialProperty
  class CustomMaterialProperty {
    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 CustomMaterialProperty();

  let rectangle = viewer.entities.add({
    rectangle: {
      coordinates: Cesium.Rectangle.fromDegrees(
        -90.0,
        39.0,
        -85,
        42.0
      ),
      // height: 10000,
      //设置entity的材质 MaterialProperty  材质属性
      material: material,
    },
  })

image.png

材质这块的内容想要完全搞懂,感觉还是要熟悉webgl。先混个脸熟,好像大概知道那些炫酷效果如何实现的了