Cesium 模拟下雨

  •  代码:
//定义下雨场景 着色器
function FragmentShader_Rain() {
  return "uniform sampler2D colorTexture;\n\
      varying vec2 v_textureCoordinates;\n\
    \n\
      float hash(float x){\n\
        return fract(sin(x*133.3)*13.13);\n\
    }\n\
    \n\
    void main(void){\n\
    \n\
      float time = czm_frameNumber / 200.0;\n\
    vec2 resolution = czm_viewport.zw;\n\
    \n\
    vec2 uv=(gl_FragCoord.xy*2.-resolution.xy)/min(resolution.x,resolution.y);\n\
    vec3 c=vec3(.6,.7,.8);\n\
    \n\
    float a=-.4;\n\
    float si=sin(a),co=cos(a);\n\
    uv*=mat2(co,-si,si,co);\n\
    uv*=length(uv+vec2(0,4.9))*.3+1.;\n\
    \n\
    float v=1.-sin(hash(floor(uv.x*100.))*2.);\n\
    float b=clamp(abs(sin(20.*time*v+uv.y*(5./(2.+v))))-.95,0.,1.)*20.;\n\
    c*=v*b; \n\
    \n\
    gl_FragColor = mix(texture2D(colorTexture, v_textureCoordinates), vec4(c,1), 0.5);  \n\
    }\n\
    ";
}


// 特效管理
export default class RainEffectManager {
  constructor(viewer) {
    this._viewer = viewer;
  }

AddRainEffect() {
    if (this._rainEffect) {
      return;
    }
    let collection = this._viewer.scene.postProcessStages;
    let fs_rain = FragmentShader_Rain();
    this._rainEffect = new Cesium.PostProcessStage({
      name: "czm_rain",
      fragmentShader: fs_rain,
    });
    collection.add(this._rainEffect);
  }

  RemoveRainEffect() {
    if (this._rainEffect) {
      this._viewer.scene.postProcessStages.remove(this._rainEffect);
      this._rainEffect = null;
    }
  }
}

  

QQ群(GIS开发交流、数据共享、软件使用):993836992

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值