/*
* @Descripttion:
* @version: 1.0
* @Author: tanzheng
* @Date: 2024-1-23 15:30:42
*/
/**
*
* 封装天气场景
* 雾
*/
class Fog{
constructor(viewer){
}
//创建雾
createFog(){
this.collection = viewer.scene.postProcessStages;
this._fog = new Cesium.PostProcessStage({
name: 'czm_fog',
fragmentShader: this.getFog(),
uniforms:{
vfog:function () {
return 0.5;
}
}
});
this.collection.add(this._fog);
viewer.scene.skyAtmosphere.hueShift = -0.8;
viewer.scene.skyAtmosphere.saturationShift = -0.7;
viewer.scene.skyAtmosphere.brightnessShift = -0.33;
viewer.scene.fog.density = 0.001;
viewer.scene.fog.minimumBrightness = 0.8;
}
//获得雪的shader
getFog(){
var fs= `
uniform sampler2D colorTexture;
uniform sampler2D depthTexture;
varying vec2 v_textureCoordinates;
uniform float vfog;
void main(void)
{
vec4 origcolor=texture2D(colorTexture, v_textureCoordinates);
vec4 fogcolor=vec4(0.8,0.8,0.8,0.5);
float depth = czm_readDepth(depthTexture, v_textureCoordinates);
vec4 depthcolor=texture2D(depthTexture, v_textureCoordinates);
float f=(depthcolor.r-0.22)/vfog;
if(f<0.0) f=0.0;
else if(f>0.3) f=0.3;
gl_FragColor = mix(origcolor,fogcolor,f);
}
`
return fs;
}
//清除雪
clearFog(){
viewer.scene.postProcessStages.remove(this._fog);
}
}
Cesium 封装雾效果
于 2024-01-28 11:36:47 首次发布
本文介绍了如何在Cesium库中使用CZM_fogpost-processstage创建和管理雾效果,包括构造函数、创建雾、获取并设置雾的fragmentshader以及清除雾的过程。
摘要由CSDN通过智能技术生成