123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- import Check from "../Core/Check.js";
- import defined from "../Core/defined.js";
- import DeveloperError from "../Core/DeveloperError.js";
- import NearFarScalar from "../Core/NearFarScalar.js";
- import Rectangle from "../Core/Rectangle.js";
- /**
- * Properties for controlling globe translucency.
- *
- * @alias GlobeTranslucency
- * @constructor
- */
- function GlobeTranslucency() {
- this._enabled = false;
- this._frontFaceAlpha = 1.0;
- this._frontFaceAlphaByDistance = undefined;
- this._backFaceAlpha = 1.0;
- this._backFaceAlphaByDistance = undefined;
- this._rectangle = Rectangle.clone(Rectangle.MAX_VALUE);
- }
- Object.defineProperties(GlobeTranslucency.prototype, {
- /**
- * When true, the globe is rendered as a translucent surface.
- * <br /><br />
- * The alpha is computed by blending {@link Globe#material}, {@link Globe#imageryLayers},
- * and {@link Globe#baseColor}, all of which may contain translucency, and then multiplying by
- * {@link GlobeTranslucency#frontFaceAlpha} and {@link GlobeTranslucency#frontFaceAlphaByDistance} for front faces and
- * {@link GlobeTranslucency#backFaceAlpha} and {@link GlobeTranslucency#backFaceAlphaByDistance} for back faces.
- * When the camera is underground back faces and front faces are swapped, i.e. back-facing geometry
- * is considered front facing.
- * <br /><br />
- * Translucency is disabled by default.
- *
- * @memberof GlobeTranslucency.prototype
- *
- * @type {Boolean}
- * @default false
- *
- * @see GlobeTranslucency#frontFaceAlpha
- * @see GlobeTranslucency#frontFaceAlphaByDistance
- * @see GlobeTranslucency#backFaceAlpha
- * @see GlobeTranslucency#backFaceAlphaByDistance
- */
- enabled: {
- get: function () {
- return this._enabled;
- },
- set: function (value) {
- //>>includeStart('debug', pragmas.debug);
- Check.typeOf.bool("enabled", value);
- //>>includeEnd('debug');
- this._enabled = value;
- },
- },
- /**
- * A constant translucency to apply to front faces of the globe.
- * <br /><br />
- * {@link GlobeTranslucency#enabled} must be set to true for this option to take effect.
- *
- * @memberof GlobeTranslucency.prototype
- *
- * @type {Number}
- * @default 1.0
- *
- * @see GlobeTranslucency#enabled
- * @see GlobeTranslucency#frontFaceAlphaByDistance
- *
- * @example
- * // Set front face translucency to 0.5.
- * globe.translucency.frontFaceAlpha = 0.5;
- * globe.translucency.enabled = true;
- */
- frontFaceAlpha: {
- get: function () {
- return this._frontFaceAlpha;
- },
- set: function (value) {
- //>>includeStart('debug', pragmas.debug);
- Check.typeOf.number.greaterThanOrEquals("frontFaceAlpha", value, 0.0);
- Check.typeOf.number.lessThanOrEquals("frontFaceAlpha", value, 1.0);
- //>>includeEnd('debug');
- this._frontFaceAlpha = value;
- },
- },
- /**
- * Gets or sets near and far translucency properties of front faces of the globe based on the distance to the camera.
- * The translucency will interpolate between the {@link NearFarScalar#nearValue} and
- * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds
- * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.
- * Outside of these ranges the translucency remains clamped to the nearest bound. If undefined,
- * frontFaceAlphaByDistance will be disabled.
- * <br /><br />
- * {@link GlobeTranslucency#enabled} must be set to true for this option to take effect.
- *
- * @memberof GlobeTranslucency.prototype
- *
- * @type {NearFarScalar}
- * @default undefined
- *
- * @see GlobeTranslucency#enabled
- * @see GlobeTranslucency#frontFaceAlpha
- *
- * @example
- * // Example 1.
- * // Set front face translucency to 0.5 when the
- * // camera is 1500 meters from the surface and 1.0
- * // as the camera distance approaches 8.0e6 meters.
- * globe.translucency.frontFaceAlphaByDistance = new Cesium.NearFarScalar(1.5e2, 0.5, 8.0e6, 1.0);
- * globe.translucency.enabled = true;
- *
- * @example
- * // Example 2.
- * // Disable front face translucency by distance
- * globe.translucency.frontFaceAlphaByDistance = undefined;
- */
- frontFaceAlphaByDistance: {
- get: function () {
- return this._frontFaceAlphaByDistance;
- },
- set: function (value) {
- //>>includeStart('debug', pragmas.debug);
- if (defined(value) && value.far < value.near) {
- throw new DeveloperError(
- "far distance must be greater than near distance."
- );
- }
- //>>includeEnd('debug');
- this._frontFaceAlphaByDistance = NearFarScalar.clone(
- value,
- this._frontFaceAlphaByDistance
- );
- },
- },
- /**
- * A constant translucency to apply to back faces of the globe.
- * <br /><br />
- * {@link GlobeTranslucency#enabled} must be set to true for this option to take effect.
- *
- * @memberof GlobeTranslucency.prototype
- *
- * @type {Number}
- * @default 1.0
- *
- * @see GlobeTranslucency#enabled
- * @see GlobeTranslucency#backFaceAlphaByDistance
- *
- * @example
- * // Set back face translucency to 0.5.
- * globe.translucency.backFaceAlpha = 0.5;
- * globe.translucency.enabled = true;
- */
- backFaceAlpha: {
- get: function () {
- return this._backFaceAlpha;
- },
- set: function (value) {
- //>>includeStart('debug', pragmas.debug);
- Check.typeOf.number.greaterThanOrEquals("backFaceAlpha", value, 0.0);
- Check.typeOf.number.lessThanOrEquals("backFaceAlpha", value, 1.0);
- //>>includeEnd('debug');
- this._backFaceAlpha = value;
- },
- },
- /**
- * Gets or sets near and far translucency properties of back faces of the globe based on the distance to the camera.
- * The translucency will interpolate between the {@link NearFarScalar#nearValue} and
- * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds
- * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.
- * Outside of these ranges the translucency remains clamped to the nearest bound. If undefined,
- * backFaceAlphaByDistance will be disabled.
- * <br /><br />
- * {@link GlobeTranslucency#enabled} must be set to true for this option to take effect.
- *
- * @memberof GlobeTranslucency.prototype
- *
- * @type {NearFarScalar}
- * @default undefined
- *
- * @see GlobeTranslucency#enabled
- * @see GlobeTranslucency#backFaceAlpha
- *
- * @example
- * // Example 1.
- * // Set back face translucency to 0.5 when the
- * // camera is 1500 meters from the surface and 1.0
- * // as the camera distance approaches 8.0e6 meters.
- * globe.translucency.backFaceAlphaByDistance = new Cesium.NearFarScalar(1.5e2, 0.5, 8.0e6, 1.0);
- * globe.translucency.enabled = true;
- *
- * @example
- * // Example 2.
- * // Disable back face translucency by distance
- * globe.translucency.backFaceAlphaByDistance = undefined;
- */
- backFaceAlphaByDistance: {
- get: function () {
- return this._backFaceAlphaByDistance;
- },
- set: function (value) {
- //>>includeStart('debug', pragmas.debug);
- if (defined(value) && value.far < value.near) {
- throw new DeveloperError(
- "far distance must be greater than near distance."
- );
- }
- //>>includeEnd('debug');
- this._backFaceAlphaByDistance = NearFarScalar.clone(
- value,
- this._backFaceAlphaByDistance
- );
- },
- },
- /**
- * A property specifying a {@link Rectangle} used to limit translucency to a cartographic area.
- * Defaults to the maximum extent of cartographic coordinates.
- *
- * @memberof GlobeTranslucency.prototype
- *
- * @type {Rectangle}
- * @default {@link Rectangle.MAX_VALUE}
- */
- rectangle: {
- get: function () {
- return this._rectangle;
- },
- set: function (value) {
- if (!defined(value)) {
- value = Rectangle.clone(Rectangle.MAX_VALUE);
- }
- Rectangle.clone(value, this._rectangle);
- },
- },
- });
- export default GlobeTranslucency;
|