1 line
144 KiB
Plaintext
1 line
144 KiB
Plaintext
{"version":3,"file":"FrustumGeometry-a0a0f5aa.js","sources":["../../../../Source/Core/CullingVolume.js","../../../../Source/Core/OrthographicOffCenterFrustum.js","../../../../Source/Core/OrthographicFrustum.js","../../../../Source/Core/PerspectiveOffCenterFrustum.js","../../../../Source/Core/PerspectiveFrustum.js","../../../../Source/Core/FrustumGeometry.js"],"sourcesContent":["import Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Intersect from \"./Intersect.js\";\nimport Plane from \"./Plane.js\";\n\n/**\n * The culling volume defined by planes.\n *\n * @alias CullingVolume\n * @constructor\n *\n * @param {Cartesian4[]} [planes] An array of clipping planes.\n */\nfunction CullingVolume(planes) {\n /**\n * Each plane is represented by a Cartesian4 object, where the x, y, and z components\n * define the unit vector normal to the plane, and the w component is the distance of the\n * plane from the origin.\n * @type {Cartesian4[]}\n * @default []\n */\n this.planes = defaultValue(planes, []);\n}\n\nconst faces = [new Cartesian3(), new Cartesian3(), new Cartesian3()];\nCartesian3.clone(Cartesian3.UNIT_X, faces[0]);\nCartesian3.clone(Cartesian3.UNIT_Y, faces[1]);\nCartesian3.clone(Cartesian3.UNIT_Z, faces[2]);\n\nconst scratchPlaneCenter = new Cartesian3();\nconst scratchPlaneNormal = new Cartesian3();\nconst scratchPlane = new Plane(new Cartesian3(1.0, 0.0, 0.0), 0.0);\n\n/**\n * Constructs a culling volume from a bounding sphere. Creates six planes that create a box containing the sphere.\n * The planes are aligned to the x, y, and z axes in world coordinates.\n *\n * @param {BoundingSphere} boundingSphere The bounding sphere used to create the culling volume.\n * @param {CullingVolume} [result] The object onto which to store the result.\n * @returns {CullingVolume} The culling volume created from the bounding sphere.\n */\nCullingVolume.fromBoundingSphere = function (boundingSphere, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(boundingSphere)) {\n throw new DeveloperError(\"boundingSphere is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new CullingVolume();\n }\n\n const length = faces.length;\n const planes = result.planes;\n planes.length = 2 * length;\n\n const center = boundingSphere.center;\n const radius = boundingSphere.radius;\n\n let planeIndex = 0;\n\n for (let i = 0; i < length; ++i) {\n const faceNormal = faces[i];\n\n let plane0 = planes[planeIndex];\n let plane1 = planes[planeIndex + 1];\n\n if (!defined(plane0)) {\n plane0 = planes[planeIndex] = new Cartesian4();\n }\n if (!defined(plane1)) {\n plane1 = planes[planeIndex + 1] = new Cartesian4();\n }\n\n Cartesian3.multiplyByScalar(faceNormal, -radius, scratchPlaneCenter);\n Cartesian3.add(center, scratchPlaneCenter, scratchPlaneCenter);\n\n plane0.x = faceNormal.x;\n plane0.y = faceNormal.y;\n plane0.z = faceNormal.z;\n plane0.w = -Cartesian3.dot(faceNormal, scratchPlaneCenter);\n\n Cartesian3.multiplyByScalar(faceNormal, radius, scratchPlaneCenter);\n Cartesian3.add(center, scratchPlaneCenter, scratchPlaneCenter);\n\n plane1.x = -faceNormal.x;\n plane1.y = -faceNormal.y;\n plane1.z = -faceNormal.z;\n plane1.w = -Cartesian3.dot(\n Cartesian3.negate(faceNormal, scratchPlaneNormal),\n scratchPlaneCenter\n );\n\n planeIndex += 2;\n }\n\n return result;\n};\n\n/**\n * Determines whether a bounding volume intersects the culling volume.\n *\n * @param {Object} boundingVolume The bounding volume whose intersection with the culling volume is to be tested.\n * @returns {Intersect} Intersect.OUTSIDE, Intersect.INTERSECTING, or Intersect.INSIDE.\n */\nCullingVolume.prototype.computeVisibility = function (boundingVolume) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(boundingVolume)) {\n throw new DeveloperError(\"boundingVolume is required.\");\n }\n //>>includeEnd('debug');\n\n const planes = this.planes;\n let intersecting = false;\n for (let k = 0, len = planes.length; k < len; ++k) {\n const result = boundingVolume.intersectPlane(\n Plane.fromCartesian4(planes[k], scratchPlane)\n );\n if (result === Intersect.OUTSIDE) {\n return Intersect.OUTSIDE;\n } else if (result === Intersect.INTERSECTING) {\n intersecting = true;\n }\n }\n\n return intersecting ? Intersect.INTERSECTING : Intersect.INSIDE;\n};\n\n/**\n * Determines whether a bounding volume intersects the culling volume.\n *\n * @param {Object} boundingVolume The bounding volume whose intersection with the culling volume is to be tested.\n * @param {Number} parentPlaneMask A bit mask from the boundingVolume's parent's check against the same culling\n * volume, such that if (planeMask & (1 << planeIndex) === 0), for k < 31, then\n * the parent (and therefore this) volume is completely inside plane[planeIndex]\n * and that plane check can be skipped.\n * @returns {Number} A plane mask as described above (which can be applied to this boundingVolume's children).\n *\n * @private\n */\nCullingVolume.prototype.computeVisibilityWithPlaneMask = function (\n boundingVolume,\n parentPlaneMask\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(boundingVolume)) {\n throw new DeveloperError(\"boundingVolume is required.\");\n }\n if (!defined(parentPlaneMask)) {\n throw new DeveloperError(\"parentPlaneMask is required.\");\n }\n //>>includeEnd('debug');\n\n if (\n parentPlaneMask === CullingVolume.MASK_OUTSIDE ||\n parentPlaneMask === CullingVolume.MASK_INSIDE\n ) {\n // parent is completely outside or completely inside, so this child is as well.\n return parentPlaneMask;\n }\n\n // Start with MASK_INSIDE (all zeros) so that after the loop, the return value can be compared with MASK_INSIDE.\n // (Because if there are fewer than 31 planes, the upper bits wont be changed.)\n let mask = CullingVolume.MASK_INSIDE;\n\n const planes = this.planes;\n for (let k = 0, len = planes.length; k < len; ++k) {\n // For k greater than 31 (since 31 is the maximum number of INSIDE/INTERSECTING bits we can store), skip the optimization.\n const flag = k < 31 ? 1 << k : 0;\n if (k < 31 && (parentPlaneMask & flag) === 0) {\n // boundingVolume is known to be INSIDE this plane.\n continue;\n }\n\n const result = boundingVolume.intersectPlane(\n Plane.fromCartesian4(planes[k], scratchPlane)\n );\n if (result === Intersect.OUTSIDE) {\n return CullingVolume.MASK_OUTSIDE;\n } else if (result === Intersect.INTERSECTING) {\n mask |= flag;\n }\n }\n\n return mask;\n};\n\n/**\n * For plane masks (as used in {@link CullingVolume#computeVisibilityWithPlaneMask}), this special value\n * represents the case where the object bounding volume is entirely outside the culling volume.\n *\n * @type {Number}\n * @private\n */\nCullingVolume.MASK_OUTSIDE = 0xffffffff;\n\n/**\n * For plane masks (as used in {@link CullingVolume.prototype.computeVisibilityWithPlaneMask}), this value\n * represents the case where the object bounding volume is entirely inside the culling volume.\n *\n * @type {Number}\n * @private\n */\nCullingVolume.MASK_INSIDE = 0x00000000;\n\n/**\n * For plane masks (as used in {@link CullingVolume.prototype.computeVisibilityWithPlaneMask}), this value\n * represents the case where the object bounding volume (may) intersect all planes of the culling volume.\n *\n * @type {Number}\n * @private\n */\nCullingVolume.MASK_INDETERMINATE = 0x7fffffff;\nexport default CullingVolume;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport CullingVolume from \"./CullingVolume.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix4 from \"./Matrix4.js\";\n\n/**\n * The viewing frustum is defined by 6 planes.\n * Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components\n * define the unit vector normal to the plane, and the w component is the distance of the\n * plane from the origin/camera position.\n *\n * @alias OrthographicOffCenterFrustum\n * @constructor\n *\n * @param {Object} [options] An object with the following properties:\n * @param {Number} [options.left] The left clipping plane distance.\n * @param {Number} [options.right] The right clipping plane distance.\n * @param {Number} [options.top] The top clipping plane distance.\n * @param {Number} [options.bottom] The bottom clipping plane distance.\n * @param {Number} [options.near=1.0] The near clipping plane distance.\n * @param {Number} [options.far=500000000.0] The far clipping plane distance.\n *\n * @example\n * const maxRadii = ellipsoid.maximumRadius;\n *\n * const frustum = new Cesium.OrthographicOffCenterFrustum();\n * frustum.right = maxRadii * Cesium.Math.PI;\n * frustum.left = -c.frustum.right;\n * frustum.top = c.frustum.right * (canvas.clientHeight / canvas.clientWidth);\n * frustum.bottom = -c.frustum.top;\n * frustum.near = 0.01 * maxRadii;\n * frustum.far = 50.0 * maxRadii;\n */\nfunction OrthographicOffCenterFrustum(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n /**\n * The left clipping plane.\n * @type {Number}\n * @default undefined\n */\n this.left = options.left;\n this._left = undefined;\n\n /**\n * The right clipping plane.\n * @type {Number}\n * @default undefined\n */\n this.right = options.right;\n this._right = undefined;\n\n /**\n * The top clipping plane.\n * @type {Number}\n * @default undefined\n */\n this.top = options.top;\n this._top = undefined;\n\n /**\n * The bottom clipping plane.\n * @type {Number}\n * @default undefined\n */\n this.bottom = options.bottom;\n this._bottom = undefined;\n\n /**\n * The distance of the near plane.\n * @type {Number}\n * @default 1.0\n */\n this.near = defaultValue(options.near, 1.0);\n this._near = this.near;\n\n /**\n * The distance of the far plane.\n * @type {Number}\n * @default 500000000.0;\n */\n this.far = defaultValue(options.far, 500000000.0);\n this._far = this.far;\n\n this._cullingVolume = new CullingVolume();\n this._orthographicMatrix = new Matrix4();\n}\n\nfunction update(frustum) {\n //>>includeStart('debug', pragmas.debug);\n if (\n !defined(frustum.right) ||\n !defined(frustum.left) ||\n !defined(frustum.top) ||\n !defined(frustum.bottom) ||\n !defined(frustum.near) ||\n !defined(frustum.far)\n ) {\n throw new DeveloperError(\n \"right, left, top, bottom, near, or far parameters are not set.\"\n );\n }\n //>>includeEnd('debug');\n\n if (\n frustum.top !== frustum._top ||\n frustum.bottom !== frustum._bottom ||\n frustum.left !== frustum._left ||\n frustum.right !== frustum._right ||\n frustum.near !== frustum._near ||\n frustum.far !== frustum._far\n ) {\n //>>includeStart('debug', pragmas.debug);\n if (frustum.left > frustum.right) {\n throw new DeveloperError(\"right must be greater than left.\");\n }\n if (frustum.bottom > frustum.top) {\n throw new DeveloperError(\"top must be greater than bottom.\");\n }\n if (frustum.near <= 0 || frustum.near > frustum.far) {\n throw new DeveloperError(\n \"near must be greater than zero and less than far.\"\n );\n }\n //>>includeEnd('debug');\n\n frustum._left = frustum.left;\n frustum._right = frustum.right;\n frustum._top = frustum.top;\n frustum._bottom = frustum.bottom;\n frustum._near = frustum.near;\n frustum._far = frustum.far;\n frustum._orthographicMatrix = Matrix4.computeOrthographicOffCenter(\n frustum.left,\n frustum.right,\n frustum.bottom,\n frustum.top,\n frustum.near,\n frustum.far,\n frustum._orthographicMatrix\n );\n }\n}\n\nObject.defineProperties(OrthographicOffCenterFrustum.prototype, {\n /**\n * Gets the orthographic projection matrix computed from the view frustum.\n * @memberof OrthographicOffCenterFrustum.prototype\n * @type {Matrix4}\n * @readonly\n */\n projectionMatrix: {\n get: function () {\n update(this);\n return this._orthographicMatrix;\n },\n },\n});\n\nconst getPlanesRight = new Cartesian3();\nconst getPlanesNearCenter = new Cartesian3();\nconst getPlanesPoint = new Cartesian3();\nconst negateScratch = new Cartesian3();\n\n/**\n * Creates a culling volume for this frustum.\n *\n * @param {Cartesian3} position The eye position.\n * @param {Cartesian3} direction The view direction.\n * @param {Cartesian3} up The up direction.\n * @returns {CullingVolume} A culling volume at the given position and orientation.\n *\n * @example\n * // Check if a bounding volume intersects the frustum.\n * const cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);\n * const intersect = cullingVolume.computeVisibility(boundingVolume);\n */\nOrthographicOffCenterFrustum.prototype.computeCullingVolume = function (\n position,\n direction,\n up\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(position)) {\n throw new DeveloperError(\"position is required.\");\n }\n if (!defined(direction)) {\n throw new DeveloperError(\"direction is required.\");\n }\n if (!defined(up)) {\n throw new DeveloperError(\"up is required.\");\n }\n //>>includeEnd('debug');\n\n const planes = this._cullingVolume.planes;\n const t = this.top;\n const b = this.bottom;\n const r = this.right;\n const l = this.left;\n const n = this.near;\n const f = this.far;\n\n const right = Cartesian3.cross(direction, up, getPlanesRight);\n Cartesian3.normalize(right, right);\n const nearCenter = getPlanesNearCenter;\n Cartesian3.multiplyByScalar(direction, n, nearCenter);\n Cartesian3.add(position, nearCenter, nearCenter);\n\n const point = getPlanesPoint;\n\n // Left plane\n Cartesian3.multiplyByScalar(right, l, point);\n Cartesian3.add(nearCenter, point, point);\n\n let plane = planes[0];\n if (!defined(plane)) {\n plane = planes[0] = new Cartesian4();\n }\n plane.x = right.x;\n plane.y = right.y;\n plane.z = right.z;\n plane.w = -Cartesian3.dot(right, point);\n\n // Right plane\n Cartesian3.multiplyByScalar(right, r, point);\n Cartesian3.add(nearCenter, point, point);\n\n plane = planes[1];\n if (!defined(plane)) {\n plane = planes[1] = new Cartesian4();\n }\n plane.x = -right.x;\n plane.y = -right.y;\n plane.z = -right.z;\n plane.w = -Cartesian3.dot(Cartesian3.negate(right, negateScratch), point);\n\n // Bottom plane\n Cartesian3.multiplyByScalar(up, b, point);\n Cartesian3.add(nearCenter, point, point);\n\n plane = planes[2];\n if (!defined(plane)) {\n plane = planes[2] = new Cartesian4();\n }\n plane.x = up.x;\n plane.y = up.y;\n plane.z = up.z;\n plane.w = -Cartesian3.dot(up, point);\n\n // Top plane\n Cartesian3.multiplyByScalar(up, t, point);\n Cartesian3.add(nearCenter, point, point);\n\n plane = planes[3];\n if (!defined(plane)) {\n plane = planes[3] = new Cartesian4();\n }\n plane.x = -up.x;\n plane.y = -up.y;\n plane.z = -up.z;\n plane.w = -Cartesian3.dot(Cartesian3.negate(up, negateScratch), point);\n\n // Near plane\n plane = planes[4];\n if (!defined(plane)) {\n plane = planes[4] = new Cartesian4();\n }\n plane.x = direction.x;\n plane.y = direction.y;\n plane.z = direction.z;\n plane.w = -Cartesian3.dot(direction, nearCenter);\n\n // Far plane\n Cartesian3.multiplyByScalar(direction, f, point);\n Cartesian3.add(position, point, point);\n\n plane = planes[5];\n if (!defined(plane)) {\n plane = planes[5] = new Cartesian4();\n }\n plane.x = -direction.x;\n plane.y = -direction.y;\n plane.z = -direction.z;\n plane.w = -Cartesian3.dot(Cartesian3.negate(direction, negateScratch), point);\n\n return this._cullingVolume;\n};\n\n/**\n * Returns the pixel's width and height in meters.\n *\n * @param {Number} drawingBufferWidth The width of the drawing buffer.\n * @param {Number} drawingBufferHeight The height of the drawing buffer.\n * @param {Number} distance The distance to the near plane in meters.\n * @param {Number} pixelRatio The scaling factor from pixel space to coordinate space.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively.\n *\n * @exception {DeveloperError} drawingBufferWidth must be greater than zero.\n * @exception {DeveloperError} drawingBufferHeight must be greater than zero.\n * @exception {DeveloperError} pixelRatio must be greater than zero.\n *\n * @example\n * // Example 1\n * // Get the width and height of a pixel.\n * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 0.0, scene.pixelRatio, new Cesium.Cartesian2());\n */\nOrthographicOffCenterFrustum.prototype.getPixelDimensions = function (\n drawingBufferWidth,\n drawingBufferHeight,\n distance,\n pixelRatio,\n result\n) {\n update(this);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(drawingBufferWidth) || !defined(drawingBufferHeight)) {\n throw new DeveloperError(\n \"Both drawingBufferWidth and drawingBufferHeight are required.\"\n );\n }\n if (drawingBufferWidth <= 0) {\n throw new DeveloperError(\"drawingBufferWidth must be greater than zero.\");\n }\n if (drawingBufferHeight <= 0) {\n throw new DeveloperError(\"drawingBufferHeight must be greater than zero.\");\n }\n if (!defined(distance)) {\n throw new DeveloperError(\"distance is required.\");\n }\n if (!defined(pixelRatio)) {\n throw new DeveloperError(\"pixelRatio is required.\");\n }\n if (pixelRatio <= 0) {\n throw new DeveloperError(\"pixelRatio must be greater than zero.\");\n }\n if (!defined(result)) {\n throw new DeveloperError(\"A result object is required.\");\n }\n //>>includeEnd('debug');\n\n const frustumWidth = this.right - this.left;\n const frustumHeight = this.top - this.bottom;\n const pixelWidth = (pixelRatio * frustumWidth) / drawingBufferWidth;\n const pixelHeight = (pixelRatio * frustumHeight) / drawingBufferHeight;\n\n result.x = pixelWidth;\n result.y = pixelHeight;\n return result;\n};\n\n/**\n * Returns a duplicate of a OrthographicOffCenterFrustum instance.\n *\n * @param {OrthographicOffCenterFrustum} [result] The object onto which to store the result.\n * @returns {OrthographicOffCenterFrustum} The modified result parameter or a new OrthographicOffCenterFrustum instance if one was not provided.\n */\nOrthographicOffCenterFrustum.prototype.clone = function (result) {\n if (!defined(result)) {\n result = new OrthographicOffCenterFrustum();\n }\n\n result.left = this.left;\n result.right = this.right;\n result.top = this.top;\n result.bottom = this.bottom;\n result.near = this.near;\n result.far = this.far;\n\n // force update of clone to compute matrices\n result._left = undefined;\n result._right = undefined;\n result._top = undefined;\n result._bottom = undefined;\n result._near = undefined;\n result._far = undefined;\n\n return result;\n};\n\n/**\n * Compares the provided OrthographicOffCenterFrustum componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {OrthographicOffCenterFrustum} [other] The right hand side OrthographicOffCenterFrustum.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nOrthographicOffCenterFrustum.prototype.equals = function (other) {\n return (\n defined(other) &&\n other instanceof OrthographicOffCenterFrustum &&\n this.right === other.right &&\n this.left === other.left &&\n this.top === other.top &&\n this.bottom === other.bottom &&\n this.near === other.near &&\n this.far === other.far\n );\n};\n\n/**\n * Compares the provided OrthographicOffCenterFrustum componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {OrthographicOffCenterFrustum} other The right hand side OrthographicOffCenterFrustum.\n * @param {Number} relativeEpsilon The relative epsilon tolerance to use for equality testing.\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n * @returns {Boolean} <code>true</code> if this and other are within the provided epsilon, <code>false</code> otherwise.\n */\nOrthographicOffCenterFrustum.prototype.equalsEpsilon = function (\n other,\n relativeEpsilon,\n absoluteEpsilon\n) {\n return (\n other === this ||\n (defined(other) &&\n other instanceof OrthographicOffCenterFrustum &&\n CesiumMath.equalsEpsilon(\n this.right,\n other.right,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.left,\n other.left,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.top,\n other.top,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.bottom,\n other.bottom,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.near,\n other.near,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.far,\n other.far,\n relativeEpsilon,\n absoluteEpsilon\n ))\n );\n};\nexport default OrthographicOffCenterFrustum;\n","import Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport OrthographicOffCenterFrustum from \"./OrthographicOffCenterFrustum.js\";\n\n/**\n * The viewing frustum is defined by 6 planes.\n * Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components\n * define the unit vector normal to the plane, and the w component is the distance of the\n * plane from the origin/camera position.\n *\n * @alias OrthographicFrustum\n * @constructor\n *\n * @param {Object} [options] An object with the following properties:\n * @param {Number} [options.width] The width of the frustum in meters.\n * @param {Number} [options.aspectRatio] The aspect ratio of the frustum's width to it's height.\n * @param {Number} [options.near=1.0] The distance of the near plane.\n * @param {Number} [options.far=500000000.0] The distance of the far plane.\n *\n * @example\n * const maxRadii = ellipsoid.maximumRadius;\n *\n * const frustum = new Cesium.OrthographicFrustum();\n * frustum.near = 0.01 * maxRadii;\n * frustum.far = 50.0 * maxRadii;\n */\nfunction OrthographicFrustum(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._offCenterFrustum = new OrthographicOffCenterFrustum();\n\n /**\n * The horizontal width of the frustum in meters.\n * @type {Number}\n * @default undefined\n */\n this.width = options.width;\n this._width = undefined;\n\n /**\n * The aspect ratio of the frustum's width to it's height.\n * @type {Number}\n * @default undefined\n */\n this.aspectRatio = options.aspectRatio;\n this._aspectRatio = undefined;\n\n /**\n * The distance of the near plane.\n * @type {Number}\n * @default 1.0\n */\n this.near = defaultValue(options.near, 1.0);\n this._near = this.near;\n\n /**\n * The distance of the far plane.\n * @type {Number}\n * @default 500000000.0;\n */\n this.far = defaultValue(options.far, 500000000.0);\n this._far = this.far;\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nOrthographicFrustum.packedLength = 4;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {OrthographicFrustum} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nOrthographicFrustum.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n array[startingIndex++] = value.width;\n array[startingIndex++] = value.aspectRatio;\n array[startingIndex++] = value.near;\n array[startingIndex] = value.far;\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {OrthographicFrustum} [result] The object into which to store the result.\n * @returns {OrthographicFrustum} The modified result parameter or a new OrthographicFrustum instance if one was not provided.\n */\nOrthographicFrustum.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n if (!defined(result)) {\n result = new OrthographicFrustum();\n }\n\n result.width = array[startingIndex++];\n result.aspectRatio = array[startingIndex++];\n result.near = array[startingIndex++];\n result.far = array[startingIndex];\n\n return result;\n};\n\nfunction update(frustum) {\n //>>includeStart('debug', pragmas.debug);\n if (\n !defined(frustum.width) ||\n !defined(frustum.aspectRatio) ||\n !defined(frustum.near) ||\n !defined(frustum.far)\n ) {\n throw new DeveloperError(\n \"width, aspectRatio, near, or far parameters are not set.\"\n );\n }\n //>>includeEnd('debug');\n\n const f = frustum._offCenterFrustum;\n\n if (\n frustum.width !== frustum._width ||\n frustum.aspectRatio !== frustum._aspectRatio ||\n frustum.near !== frustum._near ||\n frustum.far !== frustum._far\n ) {\n //>>includeStart('debug', pragmas.debug);\n if (frustum.aspectRatio < 0) {\n throw new DeveloperError(\"aspectRatio must be positive.\");\n }\n if (frustum.near < 0 || frustum.near > frustum.far) {\n throw new DeveloperError(\n \"near must be greater than zero and less than far.\"\n );\n }\n //>>includeEnd('debug');\n\n frustum._aspectRatio = frustum.aspectRatio;\n frustum._width = frustum.width;\n frustum._near = frustum.near;\n frustum._far = frustum.far;\n\n const ratio = 1.0 / frustum.aspectRatio;\n f.right = frustum.width * 0.5;\n f.left = -f.right;\n f.top = ratio * f.right;\n f.bottom = -f.top;\n f.near = frustum.near;\n f.far = frustum.far;\n }\n}\n\nObject.defineProperties(OrthographicFrustum.prototype, {\n /**\n * Gets the orthographic projection matrix computed from the view frustum.\n * @memberof OrthographicFrustum.prototype\n * @type {Matrix4}\n * @readonly\n */\n projectionMatrix: {\n get: function () {\n update(this);\n return this._offCenterFrustum.projectionMatrix;\n },\n },\n});\n\n/**\n * Creates a culling volume for this frustum.\n *\n * @param {Cartesian3} position The eye position.\n * @param {Cartesian3} direction The view direction.\n * @param {Cartesian3} up The up direction.\n * @returns {CullingVolume} A culling volume at the given position and orientation.\n *\n * @example\n * // Check if a bounding volume intersects the frustum.\n * const cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);\n * const intersect = cullingVolume.computeVisibility(boundingVolume);\n */\nOrthographicFrustum.prototype.computeCullingVolume = function (\n position,\n direction,\n up\n) {\n update(this);\n return this._offCenterFrustum.computeCullingVolume(position, direction, up);\n};\n\n/**\n * Returns the pixel's width and height in meters.\n *\n * @param {Number} drawingBufferWidth The width of the drawing buffer.\n * @param {Number} drawingBufferHeight The height of the drawing buffer.\n * @param {Number} distance The distance to the near plane in meters.\n * @param {Number} pixelRatio The scaling factor from pixel space to coordinate space.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively.\n *\n * @exception {DeveloperError} drawingBufferWidth must be greater than zero.\n * @exception {DeveloperError} drawingBufferHeight must be greater than zero.\n * @exception {DeveloperError} pixelRatio must be greater than zero.\n *\n * @example\n * // Example 1\n * // Get the width and height of a pixel.\n * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 0.0, scene.pixelRatio, new Cesium.Cartesian2());\n */\nOrthographicFrustum.prototype.getPixelDimensions = function (\n drawingBufferWidth,\n drawingBufferHeight,\n distance,\n pixelRatio,\n result\n) {\n update(this);\n return this._offCenterFrustum.getPixelDimensions(\n drawingBufferWidth,\n drawingBufferHeight,\n distance,\n pixelRatio,\n result\n );\n};\n\n/**\n * Returns a duplicate of a OrthographicFrustum instance.\n *\n * @param {OrthographicFrustum} [result] The object onto which to store the result.\n * @returns {OrthographicFrustum} The modified result parameter or a new OrthographicFrustum instance if one was not provided.\n */\nOrthographicFrustum.prototype.clone = function (result) {\n if (!defined(result)) {\n result = new OrthographicFrustum();\n }\n\n result.aspectRatio = this.aspectRatio;\n result.width = this.width;\n result.near = this.near;\n result.far = this.far;\n\n // force update of clone to compute matrices\n result._aspectRatio = undefined;\n result._width = undefined;\n result._near = undefined;\n result._far = undefined;\n\n this._offCenterFrustum.clone(result._offCenterFrustum);\n\n return result;\n};\n\n/**\n * Compares the provided OrthographicFrustum componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {OrthographicFrustum} [other] The right hand side OrthographicFrustum.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nOrthographicFrustum.prototype.equals = function (other) {\n if (!defined(other) || !(other instanceof OrthographicFrustum)) {\n return false;\n }\n\n update(this);\n update(other);\n\n return (\n this.width === other.width &&\n this.aspectRatio === other.aspectRatio &&\n this._offCenterFrustum.equals(other._offCenterFrustum)\n );\n};\n\n/**\n * Compares the provided OrthographicFrustum componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {OrthographicFrustum} other The right hand side OrthographicFrustum.\n * @param {Number} relativeEpsilon The relative epsilon tolerance to use for equality testing.\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n * @returns {Boolean} <code>true</code> if this and other are within the provided epsilon, <code>false</code> otherwise.\n */\nOrthographicFrustum.prototype.equalsEpsilon = function (\n other,\n relativeEpsilon,\n absoluteEpsilon\n) {\n if (!defined(other) || !(other instanceof OrthographicFrustum)) {\n return false;\n }\n\n update(this);\n update(other);\n\n return (\n CesiumMath.equalsEpsilon(\n this.width,\n other.width,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.aspectRatio,\n other.aspectRatio,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n this._offCenterFrustum.equalsEpsilon(\n other._offCenterFrustum,\n relativeEpsilon,\n absoluteEpsilon\n )\n );\n};\nexport default OrthographicFrustum;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport CullingVolume from \"./CullingVolume.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix4 from \"./Matrix4.js\";\n\n/**\n * The viewing frustum is defined by 6 planes.\n * Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components\n * define the unit vector normal to the plane, and the w component is the distance of the\n * plane from the origin/camera position.\n *\n * @alias PerspectiveOffCenterFrustum\n * @constructor\n *\n * @param {Object} [options] An object with the following properties:\n * @param {Number} [options.left] The left clipping plane distance.\n * @param {Number} [options.right] The right clipping plane distance.\n * @param {Number} [options.top] The top clipping plane distance.\n * @param {Number} [options.bottom] The bottom clipping plane distance.\n * @param {Number} [options.near=1.0] The near clipping plane distance.\n * @param {Number} [options.far=500000000.0] The far clipping plane distance.\n *\n * @example\n * const frustum = new Cesium.PerspectiveOffCenterFrustum({\n * left : -1.0,\n * right : 1.0,\n * top : 1.0,\n * bottom : -1.0,\n * near : 1.0,\n * far : 100.0\n * });\n *\n * @see PerspectiveFrustum\n */\nfunction PerspectiveOffCenterFrustum(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n /**\n * Defines the left clipping plane.\n * @type {Number}\n * @default undefined\n */\n this.left = options.left;\n this._left = undefined;\n\n /**\n * Defines the right clipping plane.\n * @type {Number}\n * @default undefined\n */\n this.right = options.right;\n this._right = undefined;\n\n /**\n * Defines the top clipping plane.\n * @type {Number}\n * @default undefined\n */\n this.top = options.top;\n this._top = undefined;\n\n /**\n * Defines the bottom clipping plane.\n * @type {Number}\n * @default undefined\n */\n this.bottom = options.bottom;\n this._bottom = undefined;\n\n /**\n * The distance of the near plane.\n * @type {Number}\n * @default 1.0\n */\n this.near = defaultValue(options.near, 1.0);\n this._near = this.near;\n\n /**\n * The distance of the far plane.\n * @type {Number}\n * @default 500000000.0\n */\n this.far = defaultValue(options.far, 500000000.0);\n this._far = this.far;\n\n this._cullingVolume = new CullingVolume();\n this._perspectiveMatrix = new Matrix4();\n this._infinitePerspective = new Matrix4();\n}\n\nfunction update(frustum) {\n //>>includeStart('debug', pragmas.debug);\n if (\n !defined(frustum.right) ||\n !defined(frustum.left) ||\n !defined(frustum.top) ||\n !defined(frustum.bottom) ||\n !defined(frustum.near) ||\n !defined(frustum.far)\n ) {\n throw new DeveloperError(\n \"right, left, top, bottom, near, or far parameters are not set.\"\n );\n }\n //>>includeEnd('debug');\n\n const t = frustum.top;\n const b = frustum.bottom;\n const r = frustum.right;\n const l = frustum.left;\n const n = frustum.near;\n const f = frustum.far;\n\n if (\n t !== frustum._top ||\n b !== frustum._bottom ||\n l !== frustum._left ||\n r !== frustum._right ||\n n !== frustum._near ||\n f !== frustum._far\n ) {\n //>>includeStart('debug', pragmas.debug);\n if (frustum.near <= 0 || frustum.near > frustum.far) {\n throw new DeveloperError(\n \"near must be greater than zero and less than far.\"\n );\n }\n //>>includeEnd('debug');\n\n frustum._left = l;\n frustum._right = r;\n frustum._top = t;\n frustum._bottom = b;\n frustum._near = n;\n frustum._far = f;\n frustum._perspectiveMatrix = Matrix4.computePerspectiveOffCenter(\n l,\n r,\n b,\n t,\n n,\n f,\n frustum._perspectiveMatrix\n );\n frustum._infinitePerspective = Matrix4.computeInfinitePerspectiveOffCenter(\n l,\n r,\n b,\n t,\n n,\n frustum._infinitePerspective\n );\n }\n}\n\nObject.defineProperties(PerspectiveOffCenterFrustum.prototype, {\n /**\n * Gets the perspective projection matrix computed from the view frustum.\n * @memberof PerspectiveOffCenterFrustum.prototype\n * @type {Matrix4}\n * @readonly\n *\n * @see PerspectiveOffCenterFrustum#infiniteProjectionMatrix\n */\n projectionMatrix: {\n get: function () {\n update(this);\n return this._perspectiveMatrix;\n },\n },\n\n /**\n * Gets the perspective projection matrix computed from the view frustum with an infinite far plane.\n * @memberof PerspectiveOffCenterFrustum.prototype\n * @type {Matrix4}\n * @readonly\n *\n * @see PerspectiveOffCenterFrustum#projectionMatrix\n */\n infiniteProjectionMatrix: {\n get: function () {\n update(this);\n return this._infinitePerspective;\n },\n },\n});\n\nconst getPlanesRight = new Cartesian3();\nconst getPlanesNearCenter = new Cartesian3();\nconst getPlanesFarCenter = new Cartesian3();\nconst getPlanesNormal = new Cartesian3();\n/**\n * Creates a culling volume for this frustum.\n *\n * @param {Cartesian3} position The eye position.\n * @param {Cartesian3} direction The view direction.\n * @param {Cartesian3} up The up direction.\n * @returns {CullingVolume} A culling volume at the given position and orientation.\n *\n * @example\n * // Check if a bounding volume intersects the frustum.\n * const cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);\n * const intersect = cullingVolume.computeVisibility(boundingVolume);\n */\nPerspectiveOffCenterFrustum.prototype.computeCullingVolume = function (\n position,\n direction,\n up\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(position)) {\n throw new DeveloperError(\"position is required.\");\n }\n\n if (!defined(direction)) {\n throw new DeveloperError(\"direction is required.\");\n }\n\n if (!defined(up)) {\n throw new DeveloperError(\"up is required.\");\n }\n //>>includeEnd('debug');\n\n const planes = this._cullingVolume.planes;\n\n const t = this.top;\n const b = this.bottom;\n const r = this.right;\n const l = this.left;\n const n = this.near;\n const f = this.far;\n\n const right = Cartesian3.cross(direction, up, getPlanesRight);\n\n const nearCenter = getPlanesNearCenter;\n Cartesian3.multiplyByScalar(direction, n, nearCenter);\n Cartesian3.add(position, nearCenter, nearCenter);\n\n const farCenter = getPlanesFarCenter;\n Cartesian3.multiplyByScalar(direction, f, farCenter);\n Cartesian3.add(position, farCenter, farCenter);\n\n const normal = getPlanesNormal;\n\n //Left plane computation\n Cartesian3.multiplyByScalar(right, l, normal);\n Cartesian3.add(nearCenter, normal, normal);\n Cartesian3.subtract(normal, position, normal);\n Cartesian3.normalize(normal, normal);\n Cartesian3.cross(normal, up, normal);\n Cartesian3.normalize(normal, normal);\n\n let plane = planes[0];\n if (!defined(plane)) {\n plane = planes[0] = new Cartesian4();\n }\n plane.x = normal.x;\n plane.y = normal.y;\n plane.z = normal.z;\n plane.w = -Cartesian3.dot(normal, position);\n\n //Right plane computation\n Cartesian3.multiplyByScalar(right, r, normal);\n Cartesian3.add(nearCenter, normal, normal);\n Cartesian3.subtract(normal, position, normal);\n Cartesian3.cross(up, normal, normal);\n Cartesian3.normalize(normal, normal);\n\n plane = planes[1];\n if (!defined(plane)) {\n plane = planes[1] = new Cartesian4();\n }\n plane.x = normal.x;\n plane.y = normal.y;\n plane.z = normal.z;\n plane.w = -Cartesian3.dot(normal, position);\n\n //Bottom plane computation\n Cartesian3.multiplyByScalar(up, b, normal);\n Cartesian3.add(nearCenter, normal, normal);\n Cartesian3.subtract(normal, position, normal);\n Cartesian3.cross(right, normal, normal);\n Cartesian3.normalize(normal, normal);\n\n plane = planes[2];\n if (!defined(plane)) {\n plane = planes[2] = new Cartesian4();\n }\n plane.x = normal.x;\n plane.y = normal.y;\n plane.z = normal.z;\n plane.w = -Cartesian3.dot(normal, position);\n\n //Top plane computation\n Cartesian3.multiplyByScalar(up, t, normal);\n Cartesian3.add(nearCenter, normal, normal);\n Cartesian3.subtract(normal, position, normal);\n Cartesian3.cross(normal, right, normal);\n Cartesian3.normalize(normal, normal);\n\n plane = planes[3];\n if (!defined(plane)) {\n plane = planes[3] = new Cartesian4();\n }\n plane.x = normal.x;\n plane.y = normal.y;\n plane.z = normal.z;\n plane.w = -Cartesian3.dot(normal, position);\n\n //Near plane computation\n plane = planes[4];\n if (!defined(plane)) {\n plane = planes[4] = new Cartesian4();\n }\n plane.x = direction.x;\n plane.y = direction.y;\n plane.z = direction.z;\n plane.w = -Cartesian3.dot(direction, nearCenter);\n\n //Far plane computation\n Cartesian3.negate(direction, normal);\n\n plane = planes[5];\n if (!defined(plane)) {\n plane = planes[5] = new Cartesian4();\n }\n plane.x = normal.x;\n plane.y = normal.y;\n plane.z = normal.z;\n plane.w = -Cartesian3.dot(normal, farCenter);\n\n return this._cullingVolume;\n};\n\n/**\n * Returns the pixel's width and height in meters.\n *\n * @param {Number} drawingBufferWidth The width of the drawing buffer.\n * @param {Number} drawingBufferHeight The height of the drawing buffer.\n * @param {Number} distance The distance to the near plane in meters.\n * @param {Number} pixelRatio The scaling factor from pixel space to coordinate space.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively.\n *\n * @exception {DeveloperError} drawingBufferWidth must be greater than zero.\n * @exception {DeveloperError} drawingBufferHeight must be greater than zero.\n * @exception {DeveloperError} pixelRatio must be greater than zero.\n *\n * @example\n * // Example 1\n * // Get the width and height of a pixel.\n * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 1.0, scene.pixelRatio, new Cesium.Cartesian2());\n *\n * @example\n * // Example 2\n * // Get the width and height of a pixel if the near plane was set to 'distance'.\n * // For example, get the size of a pixel of an image on a billboard.\n * const position = camera.position;\n * const direction = camera.direction;\n * const toCenter = Cesium.Cartesian3.subtract(primitive.boundingVolume.center, position, new Cesium.Cartesian3()); // vector from camera to a primitive\n * const toCenterProj = Cesium.Cartesian3.multiplyByScalar(direction, Cesium.Cartesian3.dot(direction, toCenter), new Cesium.Cartesian3()); // project vector onto camera direction vector\n * const distance = Cesium.Cartesian3.magnitude(toCenterProj);\n * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, distance, scene.pixelRatio, new Cesium.Cartesian2());\n */\nPerspectiveOffCenterFrustum.prototype.getPixelDimensions = function (\n drawingBufferWidth,\n drawingBufferHeight,\n distance,\n pixelRatio,\n result\n) {\n update(this);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(drawingBufferWidth) || !defined(drawingBufferHeight)) {\n throw new DeveloperError(\n \"Both drawingBufferWidth and drawingBufferHeight are required.\"\n );\n }\n if (drawingBufferWidth <= 0) {\n throw new DeveloperError(\"drawingBufferWidth must be greater than zero.\");\n }\n if (drawingBufferHeight <= 0) {\n throw new DeveloperError(\"drawingBufferHeight must be greater than zero.\");\n }\n if (!defined(distance)) {\n throw new DeveloperError(\"distance is required.\");\n }\n if (!defined(pixelRatio)) {\n throw new DeveloperError(\"pixelRatio is required\");\n }\n if (pixelRatio <= 0) {\n throw new DeveloperError(\"pixelRatio must be greater than zero.\");\n }\n if (!defined(result)) {\n throw new DeveloperError(\"A result object is required.\");\n }\n //>>includeEnd('debug');\n\n const inverseNear = 1.0 / this.near;\n let tanTheta = this.top * inverseNear;\n const pixelHeight =\n (2.0 * pixelRatio * distance * tanTheta) / drawingBufferHeight;\n tanTheta = this.right * inverseNear;\n const pixelWidth =\n (2.0 * pixelRatio * distance * tanTheta) / drawingBufferWidth;\n\n result.x = pixelWidth;\n result.y = pixelHeight;\n return result;\n};\n\n/**\n * Returns a duplicate of a PerspectiveOffCenterFrustum instance.\n *\n * @param {PerspectiveOffCenterFrustum} [result] The object onto which to store the result.\n * @returns {PerspectiveOffCenterFrustum} The modified result parameter or a new PerspectiveFrustum instance if one was not provided.\n */\nPerspectiveOffCenterFrustum.prototype.clone = function (result) {\n if (!defined(result)) {\n result = new PerspectiveOffCenterFrustum();\n }\n\n result.right = this.right;\n result.left = this.left;\n result.top = this.top;\n result.bottom = this.bottom;\n result.near = this.near;\n result.far = this.far;\n\n // force update of clone to compute matrices\n result._left = undefined;\n result._right = undefined;\n result._top = undefined;\n result._bottom = undefined;\n result._near = undefined;\n result._far = undefined;\n\n return result;\n};\n\n/**\n * Compares the provided PerspectiveOffCenterFrustum componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {PerspectiveOffCenterFrustum} [other] The right hand side PerspectiveOffCenterFrustum.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nPerspectiveOffCenterFrustum.prototype.equals = function (other) {\n return (\n defined(other) &&\n other instanceof PerspectiveOffCenterFrustum &&\n this.right === other.right &&\n this.left === other.left &&\n this.top === other.top &&\n this.bottom === other.bottom &&\n this.near === other.near &&\n this.far === other.far\n );\n};\n\n/**\n * Compares the provided PerspectiveOffCenterFrustum componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {PerspectiveOffCenterFrustum} other The right hand side PerspectiveOffCenterFrustum.\n * @param {Number} relativeEpsilon The relative epsilon tolerance to use for equality testing.\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n * @returns {Boolean} <code>true</code> if this and other are within the provided epsilon, <code>false</code> otherwise.\n */\nPerspectiveOffCenterFrustum.prototype.equalsEpsilon = function (\n other,\n relativeEpsilon,\n absoluteEpsilon\n) {\n return (\n other === this ||\n (defined(other) &&\n other instanceof PerspectiveOffCenterFrustum &&\n CesiumMath.equalsEpsilon(\n this.right,\n other.right,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.left,\n other.left,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.top,\n other.top,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.bottom,\n other.bottom,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.near,\n other.near,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.far,\n other.far,\n relativeEpsilon,\n absoluteEpsilon\n ))\n );\n};\nexport default PerspectiveOffCenterFrustum;\n","import Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport PerspectiveOffCenterFrustum from \"./PerspectiveOffCenterFrustum.js\";\n\n/**\n * The viewing frustum is defined by 6 planes.\n * Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components\n * define the unit vector normal to the plane, and the w component is the distance of the\n * plane from the origin/camera position.\n *\n * @alias PerspectiveFrustum\n * @constructor\n *\n * @param {Object} [options] An object with the following properties:\n * @param {Number} [options.fov] The angle of the field of view (FOV), in radians.\n * @param {Number} [options.aspectRatio] The aspect ratio of the frustum's width to it's height.\n * @param {Number} [options.near=1.0] The distance of the near plane.\n * @param {Number} [options.far=500000000.0] The distance of the far plane.\n * @param {Number} [options.xOffset=0.0] The offset in the x direction.\n * @param {Number} [options.yOffset=0.0] The offset in the y direction.\n *\n * @example\n * const frustum = new Cesium.PerspectiveFrustum({\n * fov : Cesium.Math.PI_OVER_THREE,\n * aspectRatio : canvas.clientWidth / canvas.clientHeight\n * near : 1.0,\n * far : 1000.0\n * });\n *\n * @see PerspectiveOffCenterFrustum\n */\nfunction PerspectiveFrustum(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._offCenterFrustum = new PerspectiveOffCenterFrustum();\n\n /**\n * The angle of the field of view (FOV), in radians. This angle will be used\n * as the horizontal FOV if the width is greater than the height, otherwise\n * it will be the vertical FOV.\n * @type {Number}\n * @default undefined\n */\n this.fov = options.fov;\n this._fov = undefined;\n this._fovy = undefined;\n\n this._sseDenominator = undefined;\n\n /**\n * The aspect ratio of the frustum's width to it's height.\n * @type {Number}\n * @default undefined\n */\n this.aspectRatio = options.aspectRatio;\n this._aspectRatio = undefined;\n\n /**\n * The distance of the near plane.\n * @type {Number}\n * @default 1.0\n */\n this.near = defaultValue(options.near, 1.0);\n this._near = this.near;\n\n /**\n * The distance of the far plane.\n * @type {Number}\n * @default 500000000.0\n */\n this.far = defaultValue(options.far, 500000000.0);\n this._far = this.far;\n\n /**\n * Offsets the frustum in the x direction.\n * @type {Number}\n * @default 0.0\n */\n this.xOffset = defaultValue(options.xOffset, 0.0);\n this._xOffset = this.xOffset;\n\n /**\n * Offsets the frustum in the y direction.\n * @type {Number}\n * @default 0.0\n */\n this.yOffset = defaultValue(options.yOffset, 0.0);\n this._yOffset = this.yOffset;\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nPerspectiveFrustum.packedLength = 6;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {PerspectiveFrustum} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nPerspectiveFrustum.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n array[startingIndex++] = value.fov;\n array[startingIndex++] = value.aspectRatio;\n array[startingIndex++] = value.near;\n array[startingIndex++] = value.far;\n array[startingIndex++] = value.xOffset;\n array[startingIndex] = value.yOffset;\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {PerspectiveFrustum} [result] The object into which to store the result.\n * @returns {PerspectiveFrustum} The modified result parameter or a new PerspectiveFrustum instance if one was not provided.\n */\nPerspectiveFrustum.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n if (!defined(result)) {\n result = new PerspectiveFrustum();\n }\n\n result.fov = array[startingIndex++];\n result.aspectRatio = array[startingIndex++];\n result.near = array[startingIndex++];\n result.far = array[startingIndex++];\n result.xOffset = array[startingIndex++];\n result.yOffset = array[startingIndex];\n\n return result;\n};\n\nfunction update(frustum) {\n //>>includeStart('debug', pragmas.debug);\n if (\n !defined(frustum.fov) ||\n !defined(frustum.aspectRatio) ||\n !defined(frustum.near) ||\n !defined(frustum.far)\n ) {\n throw new DeveloperError(\n \"fov, aspectRatio, near, or far parameters are not set.\"\n );\n }\n //>>includeEnd('debug');\n\n const f = frustum._offCenterFrustum;\n\n if (\n frustum.fov !== frustum._fov ||\n frustum.aspectRatio !== frustum._aspectRatio ||\n frustum.near !== frustum._near ||\n frustum.far !== frustum._far ||\n frustum.xOffset !== frustum._xOffset ||\n frustum.yOffset !== frustum._yOffset\n ) {\n //>>includeStart('debug', pragmas.debug);\n if (frustum.fov < 0 || frustum.fov >= Math.PI) {\n throw new DeveloperError(\"fov must be in the range [0, PI).\");\n }\n\n if (frustum.aspectRatio < 0) {\n throw new DeveloperError(\"aspectRatio must be positive.\");\n }\n\n if (frustum.near < 0 || frustum.near > frustum.far) {\n throw new DeveloperError(\n \"near must be greater than zero and less than far.\"\n );\n }\n //>>includeEnd('debug');\n\n frustum._aspectRatio = frustum.aspectRatio;\n frustum._fov = frustum.fov;\n frustum._fovy =\n frustum.aspectRatio <= 1\n ? frustum.fov\n : Math.atan(Math.tan(frustum.fov * 0.5) / frustum.aspectRatio) * 2.0;\n frustum._near = frustum.near;\n frustum._far = frustum.far;\n frustum._sseDenominator = 2.0 * Math.tan(0.5 * frustum._fovy);\n frustum._xOffset = frustum.xOffset;\n frustum._yOffset = frustum.yOffset;\n\n f.top = frustum.near * Math.tan(0.5 * frustum._fovy);\n f.bottom = -f.top;\n f.right = frustum.aspectRatio * f.top;\n f.left = -f.right;\n f.near = frustum.near;\n f.far = frustum.far;\n\n f.right += frustum.xOffset;\n f.left += frustum.xOffset;\n f.top += frustum.yOffset;\n f.bottom += frustum.yOffset;\n }\n}\n\nObject.defineProperties(PerspectiveFrustum.prototype, {\n /**\n * Gets the perspective projection matrix computed from the view frustum.\n * @memberof PerspectiveFrustum.prototype\n * @type {Matrix4}\n * @readonly\n *\n * @see PerspectiveFrustum#infiniteProjectionMatrix\n */\n projectionMatrix: {\n get: function () {\n update(this);\n return this._offCenterFrustum.projectionMatrix;\n },\n },\n\n /**\n * The perspective projection matrix computed from the view frustum with an infinite far plane.\n * @memberof PerspectiveFrustum.prototype\n * @type {Matrix4}\n * @readonly\n *\n * @see PerspectiveFrustum#projectionMatrix\n */\n infiniteProjectionMatrix: {\n get: function () {\n update(this);\n return this._offCenterFrustum.infiniteProjectionMatrix;\n },\n },\n\n /**\n * Gets the angle of the vertical field of view, in radians.\n * @memberof PerspectiveFrustum.prototype\n * @type {Number}\n * @readonly\n * @default undefined\n */\n fovy: {\n get: function () {\n update(this);\n return this._fovy;\n },\n },\n\n /**\n * @readonly\n * @private\n */\n sseDenominator: {\n get: function () {\n update(this);\n return this._sseDenominator;\n },\n },\n});\n\n/**\n * Creates a culling volume for this frustum.\n *\n * @param {Cartesian3} position The eye position.\n * @param {Cartesian3} direction The view direction.\n * @param {Cartesian3} up The up direction.\n * @returns {CullingVolume} A culling volume at the given position and orientation.\n *\n * @example\n * // Check if a bounding volume intersects the frustum.\n * const cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);\n * const intersect = cullingVolume.computeVisibility(boundingVolume);\n */\nPerspectiveFrustum.prototype.computeCullingVolume = function (\n position,\n direction,\n up\n) {\n update(this);\n return this._offCenterFrustum.computeCullingVolume(position, direction, up);\n};\n\n/**\n * Returns the pixel's width and height in meters.\n *\n * @param {Number} drawingBufferWidth The width of the drawing buffer.\n * @param {Number} drawingBufferHeight The height of the drawing buffer.\n * @param {Number} distance The distance to the near plane in meters.\n * @param {Number} pixelRatio The scaling factor from pixel space to coordinate space.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively.\n *\n * @exception {DeveloperError} drawingBufferWidth must be greater than zero.\n * @exception {DeveloperError} drawingBufferHeight must be greater than zero.\n * @exception {DeveloperError} pixelRatio must be greater than zero.\n *\n * @example\n * // Example 1\n * // Get the width and height of a pixel.\n * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 1.0, scene.pixelRatio, new Cesium.Cartesian2());\n *\n * @example\n * // Example 2\n * // Get the width and height of a pixel if the near plane was set to 'distance'.\n * // For example, get the size of a pixel of an image on a billboard.\n * const position = camera.position;\n * const direction = camera.direction;\n * const toCenter = Cesium.Cartesian3.subtract(primitive.boundingVolume.center, position, new Cesium.Cartesian3()); // vector from camera to a primitive\n * const toCenterProj = Cesium.Cartesian3.multiplyByScalar(direction, Cesium.Cartesian3.dot(direction, toCenter), new Cesium.Cartesian3()); // project vector onto camera direction vector\n * const distance = Cesium.Cartesian3.magnitude(toCenterProj);\n * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, distance, scene.pixelRatio, new Cesium.Cartesian2());\n */\nPerspectiveFrustum.prototype.getPixelDimensions = function (\n drawingBufferWidth,\n drawingBufferHeight,\n distance,\n pixelRatio,\n result\n) {\n update(this);\n return this._offCenterFrustum.getPixelDimensions(\n drawingBufferWidth,\n drawingBufferHeight,\n distance,\n pixelRatio,\n result\n );\n};\n\n/**\n * Returns a duplicate of a PerspectiveFrustum instance.\n *\n * @param {PerspectiveFrustum} [result] The object onto which to store the result.\n * @returns {PerspectiveFrustum} The modified result parameter or a new PerspectiveFrustum instance if one was not provided.\n */\nPerspectiveFrustum.prototype.clone = function (result) {\n if (!defined(result)) {\n result = new PerspectiveFrustum();\n }\n\n result.aspectRatio = this.aspectRatio;\n result.fov = this.fov;\n result.near = this.near;\n result.far = this.far;\n\n // force update of clone to compute matrices\n result._aspectRatio = undefined;\n result._fov = undefined;\n result._near = undefined;\n result._far = undefined;\n\n this._offCenterFrustum.clone(result._offCenterFrustum);\n\n return result;\n};\n\n/**\n * Compares the provided PerspectiveFrustum componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {PerspectiveFrustum} [other] The right hand side PerspectiveFrustum.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nPerspectiveFrustum.prototype.equals = function (other) {\n if (!defined(other) || !(other instanceof PerspectiveFrustum)) {\n return false;\n }\n\n update(this);\n update(other);\n\n return (\n this.fov === other.fov &&\n this.aspectRatio === other.aspectRatio &&\n this._offCenterFrustum.equals(other._offCenterFrustum)\n );\n};\n\n/**\n * Compares the provided PerspectiveFrustum componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {PerspectiveFrustum} other The right hand side PerspectiveFrustum.\n * @param {Number} relativeEpsilon The relative epsilon tolerance to use for equality testing.\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n * @returns {Boolean} <code>true</code> if this and other are within the provided epsilon, <code>false</code> otherwise.\n */\nPerspectiveFrustum.prototype.equalsEpsilon = function (\n other,\n relativeEpsilon,\n absoluteEpsilon\n) {\n if (!defined(other) || !(other instanceof PerspectiveFrustum)) {\n return false;\n }\n\n update(this);\n update(other);\n\n return (\n CesiumMath.equalsEpsilon(\n this.fov,\n other.fov,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.aspectRatio,\n other.aspectRatio,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n this._offCenterFrustum.equalsEpsilon(\n other._offCenterFrustum,\n relativeEpsilon,\n absoluteEpsilon\n )\n );\n};\nexport default PerspectiveFrustum;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport OrthographicFrustum from \"./OrthographicFrustum.js\";\nimport PerspectiveFrustum from \"./PerspectiveFrustum.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\nconst PERSPECTIVE = 0;\nconst ORTHOGRAPHIC = 1;\n\n/**\n * Describes a frustum at the given the origin and orientation.\n *\n * @alias FrustumGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {PerspectiveFrustum|OrthographicFrustum} options.frustum The frustum.\n * @param {Cartesian3} options.origin The origin of the frustum.\n * @param {Quaternion} options.orientation The orientation of the frustum.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n */\nfunction FrustumGeometry(options) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"options\", options);\n Check.typeOf.object(\"options.frustum\", options.frustum);\n Check.typeOf.object(\"options.origin\", options.origin);\n Check.typeOf.object(\"options.orientation\", options.orientation);\n //>>includeEnd('debug');\n\n const frustum = options.frustum;\n const orientation = options.orientation;\n const origin = options.origin;\n const vertexFormat = defaultValue(options.vertexFormat, VertexFormat.DEFAULT);\n\n // This is private because it is used by DebugCameraPrimitive to draw a multi-frustum by\n // creating multiple FrustumGeometrys. This way the near plane of one frustum doesn't overlap\n // the far plane of another.\n const drawNearPlane = defaultValue(options._drawNearPlane, true);\n\n let frustumType;\n let frustumPackedLength;\n if (frustum instanceof PerspectiveFrustum) {\n frustumType = PERSPECTIVE;\n frustumPackedLength = PerspectiveFrustum.packedLength;\n } else if (frustum instanceof OrthographicFrustum) {\n frustumType = ORTHOGRAPHIC;\n frustumPackedLength = OrthographicFrustum.packedLength;\n }\n\n this._frustumType = frustumType;\n this._frustum = frustum.clone();\n this._origin = Cartesian3.clone(origin);\n this._orientation = Quaternion.clone(orientation);\n this._drawNearPlane = drawNearPlane;\n this._vertexFormat = vertexFormat;\n this._workerName = \"createFrustumGeometry\";\n\n /**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\n this.packedLength =\n 2 +\n frustumPackedLength +\n Cartesian3.packedLength +\n Quaternion.packedLength +\n VertexFormat.packedLength;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {FrustumGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nFrustumGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n const frustumType = value._frustumType;\n const frustum = value._frustum;\n\n array[startingIndex++] = frustumType;\n\n if (frustumType === PERSPECTIVE) {\n PerspectiveFrustum.pack(frustum, array, startingIndex);\n startingIndex += PerspectiveFrustum.packedLength;\n } else {\n OrthographicFrustum.pack(frustum, array, startingIndex);\n startingIndex += OrthographicFrustum.packedLength;\n }\n\n Cartesian3.pack(value._origin, array, startingIndex);\n startingIndex += Cartesian3.packedLength;\n Quaternion.pack(value._orientation, array, startingIndex);\n startingIndex += Quaternion.packedLength;\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\n startingIndex += VertexFormat.packedLength;\n array[startingIndex] = value._drawNearPlane ? 1.0 : 0.0;\n\n return array;\n};\n\nconst scratchPackPerspective = new PerspectiveFrustum();\nconst scratchPackOrthographic = new OrthographicFrustum();\nconst scratchPackQuaternion = new Quaternion();\nconst scratchPackorigin = new Cartesian3();\nconst scratchVertexFormat = new VertexFormat();\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {FrustumGeometry} [result] The object into which to store the result.\n */\nFrustumGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n const frustumType = array[startingIndex++];\n\n let frustum;\n if (frustumType === PERSPECTIVE) {\n frustum = PerspectiveFrustum.unpack(\n array,\n startingIndex,\n scratchPackPerspective\n );\n startingIndex += PerspectiveFrustum.packedLength;\n } else {\n frustum = OrthographicFrustum.unpack(\n array,\n startingIndex,\n scratchPackOrthographic\n );\n startingIndex += OrthographicFrustum.packedLength;\n }\n\n const origin = Cartesian3.unpack(array, startingIndex, scratchPackorigin);\n startingIndex += Cartesian3.packedLength;\n const orientation = Quaternion.unpack(\n array,\n startingIndex,\n scratchPackQuaternion\n );\n startingIndex += Quaternion.packedLength;\n const vertexFormat = VertexFormat.unpack(\n array,\n startingIndex,\n scratchVertexFormat\n );\n startingIndex += VertexFormat.packedLength;\n const drawNearPlane = array[startingIndex] === 1.0;\n\n if (!defined(result)) {\n return new FrustumGeometry({\n frustum: frustum,\n origin: origin,\n orientation: orientation,\n vertexFormat: vertexFormat,\n _drawNearPlane: drawNearPlane,\n });\n }\n\n const frustumResult =\n frustumType === result._frustumType ? result._frustum : undefined;\n result._frustum = frustum.clone(frustumResult);\n\n result._frustumType = frustumType;\n result._origin = Cartesian3.clone(origin, result._origin);\n result._orientation = Quaternion.clone(orientation, result._orientation);\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n result._drawNearPlane = drawNearPlane;\n\n return result;\n};\n\nfunction getAttributes(\n offset,\n normals,\n tangents,\n bitangents,\n st,\n normal,\n tangent,\n bitangent\n) {\n const stOffset = (offset / 3) * 2;\n\n for (let i = 0; i < 4; ++i) {\n if (defined(normals)) {\n normals[offset] = normal.x;\n normals[offset + 1] = normal.y;\n normals[offset + 2] = normal.z;\n }\n if (defined(tangents)) {\n tangents[offset] = tangent.x;\n tangents[offset + 1] = tangent.y;\n tangents[offset + 2] = tangent.z;\n }\n if (defined(bitangents)) {\n bitangents[offset] = bitangent.x;\n bitangents[offset + 1] = bitangent.y;\n bitangents[offset + 2] = bitangent.z;\n }\n offset += 3;\n }\n\n st[stOffset] = 0.0;\n st[stOffset + 1] = 0.0;\n st[stOffset + 2] = 1.0;\n st[stOffset + 3] = 0.0;\n st[stOffset + 4] = 1.0;\n st[stOffset + 5] = 1.0;\n st[stOffset + 6] = 0.0;\n st[stOffset + 7] = 1.0;\n}\n\nconst scratchRotationMatrix = new Matrix3();\nconst scratchViewMatrix = new Matrix4();\nconst scratchInverseMatrix = new Matrix4();\n\nconst scratchXDirection = new Cartesian3();\nconst scratchYDirection = new Cartesian3();\nconst scratchZDirection = new Cartesian3();\nconst scratchNegativeX = new Cartesian3();\nconst scratchNegativeY = new Cartesian3();\nconst scratchNegativeZ = new Cartesian3();\n\nconst frustumSplits = new Array(3);\n\nconst frustumCornersNDC = new Array(4);\nfrustumCornersNDC[0] = new Cartesian4(-1.0, -1.0, 1.0, 1.0);\nfrustumCornersNDC[1] = new Cartesian4(1.0, -1.0, 1.0, 1.0);\nfrustumCornersNDC[2] = new Cartesian4(1.0, 1.0, 1.0, 1.0);\nfrustumCornersNDC[3] = new Cartesian4(-1.0, 1.0, 1.0, 1.0);\n\nconst scratchFrustumCorners = new Array(4);\nfor (let i = 0; i < 4; ++i) {\n scratchFrustumCorners[i] = new Cartesian4();\n}\n\nFrustumGeometry._computeNearFarPlanes = function (\n origin,\n orientation,\n frustumType,\n frustum,\n positions,\n xDirection,\n yDirection,\n zDirection\n) {\n const rotationMatrix = Matrix3.fromQuaternion(\n orientation,\n scratchRotationMatrix\n );\n let x = defaultValue(xDirection, scratchXDirection);\n let y = defaultValue(yDirection, scratchYDirection);\n let z = defaultValue(zDirection, scratchZDirection);\n\n x = Matrix3.getColumn(rotationMatrix, 0, x);\n y = Matrix3.getColumn(rotationMatrix, 1, y);\n z = Matrix3.getColumn(rotationMatrix, 2, z);\n\n Cartesian3.normalize(x, x);\n Cartesian3.normalize(y, y);\n Cartesian3.normalize(z, z);\n\n Cartesian3.negate(x, x);\n\n const view = Matrix4.computeView(origin, z, y, x, scratchViewMatrix);\n\n let inverseView;\n let inverseViewProjection;\n if (frustumType === PERSPECTIVE) {\n const projection = frustum.projectionMatrix;\n const viewProjection = Matrix4.multiply(\n projection,\n view,\n scratchInverseMatrix\n );\n inverseViewProjection = Matrix4.inverse(\n viewProjection,\n scratchInverseMatrix\n );\n } else {\n inverseView = Matrix4.inverseTransformation(view, scratchInverseMatrix);\n }\n\n if (defined(inverseViewProjection)) {\n frustumSplits[0] = frustum.near;\n frustumSplits[1] = frustum.far;\n } else {\n frustumSplits[0] = 0.0;\n frustumSplits[1] = frustum.near;\n frustumSplits[2] = frustum.far;\n }\n\n for (let i = 0; i < 2; ++i) {\n for (let j = 0; j < 4; ++j) {\n let corner = Cartesian4.clone(\n frustumCornersNDC[j],\n scratchFrustumCorners[j]\n );\n\n if (!defined(inverseViewProjection)) {\n if (defined(frustum._offCenterFrustum)) {\n frustum = frustum._offCenterFrustum;\n }\n\n const near = frustumSplits[i];\n const far = frustumSplits[i + 1];\n\n corner.x =\n (corner.x * (frustum.right - frustum.left) +\n frustum.left +\n frustum.right) *\n 0.5;\n corner.y =\n (corner.y * (frustum.top - frustum.bottom) +\n frustum.bottom +\n frustum.top) *\n 0.5;\n corner.z = (corner.z * (near - far) - near - far) * 0.5;\n corner.w = 1.0;\n\n Matrix4.multiplyByVector(inverseView, corner, corner);\n } else {\n corner = Matrix4.multiplyByVector(\n inverseViewProjection,\n corner,\n corner\n );\n\n // Reverse perspective divide\n const w = 1.0 / corner.w;\n Cartesian3.multiplyByScalar(corner, w, corner);\n\n Cartesian3.subtract(corner, origin, corner);\n Cartesian3.normalize(corner, corner);\n\n const fac = Cartesian3.dot(z, corner);\n Cartesian3.multiplyByScalar(corner, frustumSplits[i] / fac, corner);\n Cartesian3.add(corner, origin, corner);\n }\n\n positions[12 * i + j * 3] = corner.x;\n positions[12 * i + j * 3 + 1] = corner.y;\n positions[12 * i + j * 3 + 2] = corner.z;\n }\n }\n};\n\n/**\n * Computes the geometric representation of a frustum, including its vertices, indices, and a bounding sphere.\n *\n * @param {FrustumGeometry} frustumGeometry A description of the frustum.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nFrustumGeometry.createGeometry = function (frustumGeometry) {\n const frustumType = frustumGeometry._frustumType;\n const frustum = frustumGeometry._frustum;\n const origin = frustumGeometry._origin;\n const orientation = frustumGeometry._orientation;\n const drawNearPlane = frustumGeometry._drawNearPlane;\n const vertexFormat = frustumGeometry._vertexFormat;\n\n const numberOfPlanes = drawNearPlane ? 6 : 5;\n let positions = new Float64Array(3 * 4 * 6);\n FrustumGeometry._computeNearFarPlanes(\n origin,\n orientation,\n frustumType,\n frustum,\n positions\n );\n\n // -x plane\n let offset = 3 * 4 * 2;\n positions[offset] = positions[3 * 4];\n positions[offset + 1] = positions[3 * 4 + 1];\n positions[offset + 2] = positions[3 * 4 + 2];\n positions[offset + 3] = positions[0];\n positions[offset + 4] = positions[1];\n positions[offset + 5] = positions[2];\n positions[offset + 6] = positions[3 * 3];\n positions[offset + 7] = positions[3 * 3 + 1];\n positions[offset + 8] = positions[3 * 3 + 2];\n positions[offset + 9] = positions[3 * 7];\n positions[offset + 10] = positions[3 * 7 + 1];\n positions[offset + 11] = positions[3 * 7 + 2];\n\n // -y plane\n offset += 3 * 4;\n positions[offset] = positions[3 * 5];\n positions[offset + 1] = positions[3 * 5 + 1];\n positions[offset + 2] = positions[3 * 5 + 2];\n positions[offset + 3] = positions[3];\n positions[offset + 4] = positions[3 + 1];\n positions[offset + 5] = positions[3 + 2];\n positions[offset + 6] = positions[0];\n positions[offset + 7] = positions[1];\n positions[offset + 8] = positions[2];\n positions[offset + 9] = positions[3 * 4];\n positions[offset + 10] = positions[3 * 4 + 1];\n positions[offset + 11] = positions[3 * 4 + 2];\n\n // +x plane\n offset += 3 * 4;\n positions[offset] = positions[3];\n positions[offset + 1] = positions[3 + 1];\n positions[offset + 2] = positions[3 + 2];\n positions[offset + 3] = positions[3 * 5];\n positions[offset + 4] = positions[3 * 5 + 1];\n positions[offset + 5] = positions[3 * 5 + 2];\n positions[offset + 6] = positions[3 * 6];\n positions[offset + 7] = positions[3 * 6 + 1];\n positions[offset + 8] = positions[3 * 6 + 2];\n positions[offset + 9] = positions[3 * 2];\n positions[offset + 10] = positions[3 * 2 + 1];\n positions[offset + 11] = positions[3 * 2 + 2];\n\n // +y plane\n offset += 3 * 4;\n positions[offset] = positions[3 * 2];\n positions[offset + 1] = positions[3 * 2 + 1];\n positions[offset + 2] = positions[3 * 2 + 2];\n positions[offset + 3] = positions[3 * 6];\n positions[offset + 4] = positions[3 * 6 + 1];\n positions[offset + 5] = positions[3 * 6 + 2];\n positions[offset + 6] = positions[3 * 7];\n positions[offset + 7] = positions[3 * 7 + 1];\n positions[offset + 8] = positions[3 * 7 + 2];\n positions[offset + 9] = positions[3 * 3];\n positions[offset + 10] = positions[3 * 3 + 1];\n positions[offset + 11] = positions[3 * 3 + 2];\n\n if (!drawNearPlane) {\n positions = positions.subarray(3 * 4);\n }\n\n const attributes = new GeometryAttributes({\n position: new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: positions,\n }),\n });\n\n if (\n defined(vertexFormat.normal) ||\n defined(vertexFormat.tangent) ||\n defined(vertexFormat.bitangent) ||\n defined(vertexFormat.st)\n ) {\n const normals = defined(vertexFormat.normal)\n ? new Float32Array(3 * 4 * numberOfPlanes)\n : undefined;\n const tangents = defined(vertexFormat.tangent)\n ? new Float32Array(3 * 4 * numberOfPlanes)\n : undefined;\n const bitangents = defined(vertexFormat.bitangent)\n ? new Float32Array(3 * 4 * numberOfPlanes)\n : undefined;\n const st = defined(vertexFormat.st)\n ? new Float32Array(2 * 4 * numberOfPlanes)\n : undefined;\n\n const x = scratchXDirection;\n const y = scratchYDirection;\n const z = scratchZDirection;\n\n const negativeX = Cartesian3.negate(x, scratchNegativeX);\n const negativeY = Cartesian3.negate(y, scratchNegativeY);\n const negativeZ = Cartesian3.negate(z, scratchNegativeZ);\n\n offset = 0;\n if (drawNearPlane) {\n getAttributes(offset, normals, tangents, bitangents, st, negativeZ, x, y); // near\n offset += 3 * 4;\n }\n getAttributes(offset, normals, tangents, bitangents, st, z, negativeX, y); // far\n offset += 3 * 4;\n getAttributes(\n offset,\n normals,\n tangents,\n bitangents,\n st,\n negativeX,\n negativeZ,\n y\n ); // -x\n offset += 3 * 4;\n getAttributes(\n offset,\n normals,\n tangents,\n bitangents,\n st,\n negativeY,\n negativeZ,\n negativeX\n ); // -y\n offset += 3 * 4;\n getAttributes(offset, normals, tangents, bitangents, st, x, z, y); // +x\n offset += 3 * 4;\n getAttributes(offset, normals, tangents, bitangents, st, y, z, negativeX); // +y\n\n if (defined(normals)) {\n attributes.normal = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: normals,\n });\n }\n if (defined(tangents)) {\n attributes.tangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: tangents,\n });\n }\n if (defined(bitangents)) {\n attributes.bitangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: bitangents,\n });\n }\n if (defined(st)) {\n attributes.st = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n values: st,\n });\n }\n }\n\n const indices = new Uint16Array(6 * numberOfPlanes);\n for (let i = 0; i < numberOfPlanes; ++i) {\n const indexOffset = i * 6;\n const index = i * 4;\n\n indices[indexOffset] = index;\n indices[indexOffset + 1] = index + 1;\n indices[indexOffset + 2] = index + 2;\n indices[indexOffset + 3] = index;\n indices[indexOffset + 4] = index + 2;\n indices[indexOffset + 5] = index + 3;\n }\n\n return new Geometry({\n attributes: attributes,\n indices: indices,\n primitiveType: PrimitiveType.TRIANGLES,\n boundingSphere: BoundingSphere.fromVertices(positions),\n });\n};\nexport default FrustumGeometry;\n"],"names":["defaultValue","Cartesian3","Plane","defined","DeveloperError","Cartesian4","Intersect","Matrix4","update","getPlanesRight","getPlanesNearCenter","CesiumMath","Check","VertexFormat","Quaternion","Matrix3","GeometryAttributes","GeometryAttribute","ComponentDatatype","Geometry","PrimitiveType","BoundingSphere"],"mappings":"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"} |