UNPKG

@cesium/engine

Version:

CesiumJS is a JavaScript library for creating 3D globes and 2D maps in a web browser without a plugin.

150 lines (137 loc) 4.4 kB
import Cartesian3 from "../Core/Cartesian3.js"; import CesiumMath from "../Core/Math.js"; import DynamicAtmosphereLightingType from "./DynamicAtmosphereLightingType.js"; /** * Common atmosphere settings used by 3D Tiles and models for rendering sky atmosphere, ground atmosphere, and fog. * * <p> * This class is not to be confused with {@link SkyAtmosphere}, which is responsible for rendering the sky. * </p> * <p> * While the atmosphere settings affect the color of fog, see {@link Fog} to control how fog is rendered. * </p> * * @alias Atmosphere * @constructor * * @example * // Turn on dynamic atmosphere lighting using the sun direction * scene.atmosphere.dynamicLighting = Cesium.DynamicAtmosphereLightingType.SUNLIGHT; * * @example * // Turn on dynamic lighting using whatever light source is in the scene * scene.light = new Cesium.DirectionalLight({ * direction: new Cesium.Cartesian3(1, 0, 0) * }); * scene.atmosphere.dynamicLighting = Cesium.DynamicAtmosphereLightingType.SCENE_LIGHT; * * @example * // Adjust the color of the atmosphere effects. * scene.atmosphere.hueShift = 0.4; // Cycle 40% around the color wheel * scene.atmosphere.brightnessShift = 0.25; // Increase the brightness * scene.atmosphere.saturationShift = -0.1; // Desaturate the colors * * @see SkyAtmosphere * @see Globe * @see Fog */ function Atmosphere() { /** * The intensity of the light that is used for computing the ground atmosphere color. * * @type {number} * @default 10.0 */ this.lightIntensity = 10.0; /** * The Rayleigh scattering coefficient used in the atmospheric scattering equations for the ground atmosphere. * * @type {Cartesian3} * @default Cartesian3(5.5e-6, 13.0e-6, 28.4e-6) */ this.rayleighCoefficient = new Cartesian3(5.5e-6, 13.0e-6, 28.4e-6); /** * The Mie scattering coefficient used in the atmospheric scattering equations for the ground atmosphere. * * @type {Cartesian3} * @default Cartesian3(21e-6, 21e-6, 21e-6) */ this.mieCoefficient = new Cartesian3(21e-6, 21e-6, 21e-6); /** * The Rayleigh scale height used in the atmospheric scattering equations for the ground atmosphere, in meters. * * @type {number} * @default 10000.0 */ this.rayleighScaleHeight = 10000.0; /** * The Mie scale height used in the atmospheric scattering equations for the ground atmosphere, in meters. * * @type {number} * @default 3200.0 */ this.mieScaleHeight = 3200.0; /** * The anisotropy of the medium to consider for Mie scattering. * <p> * Valid values are between -1.0 and 1.0. * </p> * * @type {number} * @default 0.9 */ this.mieAnisotropy = 0.9; /** * The hue shift to apply to the atmosphere. Defaults to 0.0 (no shift). * A hue shift of 1.0 indicates a complete rotation of the hues available. * * @type {number} * @default 0.0 */ this.hueShift = 0.0; /** * The saturation shift to apply to the atmosphere. Defaults to 0.0 (no shift). * A saturation shift of -1.0 is monochrome. * * @type {number} * @default 0.0 */ this.saturationShift = 0.0; /** * The brightness shift to apply to the atmosphere. Defaults to 0.0 (no shift). * A brightness shift of -1.0 is complete darkness, which will let space show through. * * @type {number} * @default 0.0 */ this.brightnessShift = 0.0; /** * When not DynamicAtmosphereLightingType.NONE, the selected light source will * be used for dynamically lighting all atmosphere-related rendering effects. * * @type {DynamicAtmosphereLightingType} * @default DynamicAtmosphereLightingType.NONE */ this.dynamicLighting = DynamicAtmosphereLightingType.NONE; } /** * Returns <code>true</code> if the atmosphere shader requires a color correct step. * @param {Atmosphere} atmosphere The atmosphere instance to check * @returns {boolean} true if the atmosphere shader requires a color correct step */ Atmosphere.requiresColorCorrect = function (atmosphere) { return !( CesiumMath.equalsEpsilon(atmosphere.hueShift, 0.0, CesiumMath.EPSILON7) && CesiumMath.equalsEpsilon( atmosphere.saturationShift, 0.0, CesiumMath.EPSILON7, ) && CesiumMath.equalsEpsilon( atmosphere.brightnessShift, 0.0, CesiumMath.EPSILON7, ) ); }; export default Atmosphere;