utils/weather/Fog.js

/*
 * @Author: jianlei wang
 * @Date: 2024-02-22 17:31:09
 * @Last Modified by: jianlei wang
 * @Last Modified time: 2024-03-28 15:17:17
 */

import { Cesium } from '../../../namespace'
import fogShader from '../shaders/weather/fog.glsl'
/**
 * 大雾天气效果
 * @class
 */
class FogEffect {
  /**
   * 构造函数
   * @param {Object} viewer 地图场景对象
   */
  constructor(viewer) {
    this._viewer = viewer
  }
  _init() {
    this._clear()
    this._fogStage = new Cesium.PostProcessStage({
      name: 'weather_fog',
      fragmentShader: fogShader,
      uniforms: {
        fogByDistance: new Cesium.Cartesian4(10, 0.0, 1000, 0.8),
        fogColor: Cesium.Color.WHITE,
      },
    })
    this._viewer.scene.postProcessStages.add(this._fogStage)
  }
  /**
   * 销毁对象
   */
  destroy() {
    this._clear()
    this._fogStage.destroy()
  }
  _clear() {
    if (!this._viewer || !this._fogStage) return
    this._viewer.scene.postProcessStages.remove(this._fogStage)
  }
  /**
   * 控制大雾天气显示
   * @type {Boolean}
   */
  set show(bool) {
    bool ? this._init() : this._clear()
  }
}
export default FogEffect