# PerspectiveFrustum

#### new Cesium.PerspectiveFrustum(options)
engine/Source/Core/PerspectiveFrustum.js 35

The viewing frustum is defined by 6 planes. Each plane is represented by a `Cartesian4` object, where the x, y, and z components define the unit vector normal to the plane, and the w component is the distance of the plane from the origin/camera position.

Name | Type | Description
--- | --- | ---
`options` | object | optional An object with the following properties:
Name | Type | Default | Description
--- | --- | --- | ---
`fov` | number |  | optional The angle of the field of view (FOV), in radians.
`aspectRatio` | number |  | optional The aspect ratio of the frustum's width to it's height.
`near` | number | `1.0` | optional The distance of the near plane.
`far` | number | `500000000.0` | optional The distance of the far plane.
`xOffset` | number | `0.0` | optional The offset in the x direction.
`yOffset` | number | `0.0` | optional The offset in the y direction.

##### Example:

    const frustum = new Cesium.PerspectiveFrustum({
        fov : Cesium.Math.PI_OVER_THREE,
        aspectRatio : canvas.clientWidth / canvas.clientHeight
        near : 1.0,
        far : 1000.0
    });

##### See:

- PerspectiveOffCenterFrustum

### Members

#### static Cesium.PerspectiveFrustum.packedLength : number
engine/Source/Core/PerspectiveFrustum.js 98

The number of elements used to pack the object into an array.

#### aspectRatio : number
engine/Source/Core/PerspectiveFrustum.js 58

The aspect ratio of the frustum's width to it's height.

Default Value: `undefined`

#### far : number
engine/Source/Core/PerspectiveFrustum.js 74

The distance of the far plane.

Default Value: `500000000.0`

#### fov : number
engine/Source/Core/PerspectiveFrustum.js 47

The angle of the field of view (FOV), in radians. This angle will be used as the horizontal FOV if the width is greater than the height, otherwise it will be the vertical FOV.

Default Value: `undefined`

#### readonly fovy : number
engine/Source/Core/PerspectiveFrustum.js 260

Gets the angle of the vertical field of view, in radians.

Default Value: `undefined`

#### readonly infiniteProjectionMatrix : Matrix4
engine/Source/Core/PerspectiveFrustum.js 246

The perspective projection matrix computed from the view frustum with an infinite far plane.

##### See:

- PerspectiveFrustum#projectionMatrix

#### near : number
engine/Source/Core/PerspectiveFrustum.js 66

The distance of the near plane.

Default Value: `1.0`

#### readonly projectionMatrix : Matrix4
engine/Source/Core/PerspectiveFrustum.js 231

Gets the perspective projection matrix computed from the view frustum.

##### See:

- PerspectiveFrustum#infiniteProjectionMatrix

#### xOffset : number
engine/Source/Core/PerspectiveFrustum.js 82

Offsets the frustum in the x direction.

Default Value: `0.0`

#### yOffset : number
engine/Source/Core/PerspectiveFrustum.js 90

Offsets the frustum in the y direction.

Default Value: `0.0`

### Methods

#### static Cesium.PerspectiveFrustum.pack(value, array, startingIndex) → Array.<number>
engine/Source/Core/PerspectiveFrustum.js 109

Stores the provided instance into the provided array.

Name | Type | Default | Description
--- | --- | --- | ---
`value` | PerspectiveFrustum |  | The value to pack.
`array` | Array.<number> |  | The array to pack into.
`startingIndex` | number | `0` | optional The index into the array at which to start packing the elements.

##### Returns:

The array that was packed into

#### static Cesium.PerspectiveFrustum.unpack(array, startingIndex, result) → PerspectiveFrustum
engine/Source/Core/PerspectiveFrustum.js 135

Retrieves an instance from a packed array.

Name | Type | Default | Description
--- | --- | --- | ---
`array` | Array.<number> |  | The packed array.
`startingIndex` | number | `0` | optional The starting index of the element to be unpacked.
`result` | PerspectiveFrustum |  | optional The object into which to store the result.

##### Returns:

The modified result parameter or a new PerspectiveFrustum instance if one was not provided.

#### clone(result) → PerspectiveFrustum
engine/Source/Core/PerspectiveFrustum.js 354

Returns a duplicate of a PerspectiveFrustum instance.

Name | Type | Description
--- | --- | ---
`result` | PerspectiveFrustum | optional The object onto which to store the result.

##### Returns:

The modified result parameter or a new PerspectiveFrustum instance if one was not provided.

#### computeCullingVolume(position, direction, up) → CullingVolume
engine/Source/Core/PerspectiveFrustum.js 292

Creates a culling volume for this frustum.

Name | Type | Description
--- | --- | ---
`position` | Cartesian3 | The eye position.
`direction` | Cartesian3 | The view direction.
`up` | Cartesian3 | The up direction.

##### Returns:

A culling volume at the given position and orientation.

##### Example:

    // Check if a bounding volume intersects the frustum.
    const cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);
    const intersect = cullingVolume.computeVisibility(boundingVolume);

#### equals(other) → boolean
engine/Source/Core/PerspectiveFrustum.js 382

Compares the provided PerspectiveFrustum componentwise and returns `true` if they are equal, `false` otherwise.

Name | Type | Description
--- | --- | ---
`other` | PerspectiveFrustum | optional The right hand side PerspectiveFrustum.

##### Returns:

`true` if they are equal, `false` otherwise.

#### equalsEpsilon(other, relativeEpsilon, absoluteEpsilon) → boolean
engine/Source/Core/PerspectiveFrustum.js 407

Compares the provided PerspectiveFrustum componentwise and returns `true` if they pass an absolute or relative tolerance test, `false` otherwise.

Name | Type | Default | Description
--- | --- | --- | ---
`other` | PerspectiveFrustum |  | The right hand side PerspectiveFrustum.
`relativeEpsilon` | number |  | The relative epsilon tolerance to use for equality testing.
`absoluteEpsilon` | number | `relativeEpsilon` | optional The absolute epsilon tolerance to use for equality testing.

##### Returns:

`true` if this and other are within the provided epsilon, `false` otherwise.

#### getPixelDimensions(drawingBufferWidth, drawingBufferHeight, distance, pixelRatio, result) → Cartesian2
engine/Source/Core/PerspectiveFrustum.js 331

Returns the pixel's width and height in meters.

Name | Type | Description
--- | --- | ---
`drawingBufferWidth` | number | The width of the drawing buffer.
`drawingBufferHeight` | number | The height of the drawing buffer.
`distance` | number | The distance to the near plane in meters.
`pixelRatio` | number | The scaling factor from pixel space to coordinate space.
`result` | Cartesian2 | The object onto which to store the result.

##### Returns:

The modified result parameter or a new instance of `Cartesian2` with the pixel's width and height in the x and y properties, respectively.

##### Throws:

- DeveloperError : drawingBufferWidth must be greater than zero.
- DeveloperError : drawingBufferHeight must be greater than zero.
- DeveloperError : pixelRatio must be greater than zero.

##### Examples:

    // Example 1
    // Get the width and height of a pixel.
    const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 1.0, scene.pixelRatio, new Cesium.Cartesian2());

    // Example 2
    // Get the width and height of a pixel if the near plane was set to 'distance'.
    // For example, get the size of a pixel of an image on a billboard.
    const position = camera.position;
    const direction = camera.direction;
    const toCenter = Cesium.Cartesian3.subtract(primitive.boundingVolume.center, position, new Cesium.Cartesian3());      // vector from camera to a primitive
    const toCenterProj = Cesium.Cartesian3.multiplyByScalar(direction, Cesium.Cartesian3.dot(direction, toCenter), new Cesium.Cartesian3()); // project vector onto camera direction vector
    const distance = Cesium.Cartesian3.magnitude(toCenterProj);
    const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, distance, scene.pixelRatio, new Cesium.Cartesian2());

Need help? The fastest way to get answers is from the community and team on the Cesium Forum.