新版cesium下雨特效

新版cesium下雨特效(webgl2.0)

旧版代码

      let rain = new Cesium.PostProcessStage({
        name: "czm_rain",
        fragmentShader: `
                uniform sampler2D colorTexture;//输入的场景渲染照片
                varying vec2 v_textureCoordinates;
                uniform float vrain;
    
                float hash(float x){
                    return fract(sin(x*133.3)*13.13);
                }
    
                void main(void){
                    float time = czm_frameNumber / vrain;
                    vec2 resolution = czm_viewport.zw;
                    
                    vec2 uv=(gl_FragCoord.xy*2.-resolution.xy)/min(resolution.x,resolution.y);
                    vec3 c=vec3(.6,.7,.8);
                    float a=0.4;
                    float si=sin(a),co=cos(a);
                    uv*=mat2(co,-si,si,co);
                    uv*=length(uv+vec2(0,4.9))*.3+1.;
                    
                    float v=1.-sin(hash(floor(uv.x*100.))*2.);
                    float b=clamp(abs(sin(20.*time*v+uv.y*(5./(2.+v))))-.95,0.,1.)*20.;
                   
                    c*=v*b; //屏幕上雨的颜色
                    gl_FragColor = mix(texture2D(colorTexture, v_textureCoordinates), vec4(c,1), 0.5); //将雨和三维场景融合
                }
			`,
        uniforms: {
          vrain: function () {
            return 30; //value:时间
          },
        },
      });

旧版代码

  let rain = new Cesium.PostProcessStage({
          name: "czm_rain",
          fragmentShader: `
                  uniform sampler2D colorTexture;//输入的场景渲染照片
                  in vec2 v_textureCoordinates;
                  uniform float vrain;

                  float hash(float x){
                      return fract(sin(x*133.3)*13.13);
                  }
                  out vec4 vFragColor;
                  void main(void){
                      float time = czm_frameNumber / vrain;
                      vec2 resolution = czm_viewport.zw;

                      vec2 uv=(gl_FragCoord.xy*2.-resolution.xy)/min(resolution.x,resolution.y);
                      vec3 c=vec3(.6,.7,.8);
                      float a=0.4;
                      float si=sin(a),co=cos(a);
                      uv*=mat2(co,-si,si,co);
                      uv*=length(uv+vec2(0,4.9))*.3+1.;

                      float v=1.-sin(hash(floor(uv.x*100.))*2.);
                      float b=clamp(abs(sin(20.*time*v+uv.y*(5./(2.+v))))-.95,0.,1.)*20.;

                      c*=v*b; //屏幕上雨的颜色
                      vFragColor = mix(texture(colorTexture, v_textureCoordinates), vec4(c,1), 0.5); //将雨和三维场景融合
                  }
      	`,
          uniforms: {
            vrain: function () {
              return 30; //value:时间
            },
          },
        });

你可能感兴趣的:(cesium,前端,javascript,cesium)