# PerspectiveOffCenterFrustum

#### new Cesium.PerspectiveOffCenterFrustum(options)
Core/PerspectiveOffCenterFrustum.js 39

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
--- | --- | --- | ---
`left` | Number |  | optional The left clipping plane distance.
`right` | Number |  | optional The right clipping plane distance.
`top` | Number |  | optional The top clipping plane distance.
`bottom` | Number |  | optional The bottom clipping plane distance.
`near` | Number | `1.0` | optional The near clipping plane distance.
`far` | Number | `500000000.0` | optional The far clipping plane distance.

##### Example:

    var frustum = new Cesium.PerspectiveOffCenterFrustum({
        left : -1.0,
        right : 1.0,
        top : 1.0,
        bottom : -1.0,
        near : 1.0,
        far : 100.0
    });

##### See:

- PerspectiveFrustum

### Members

#### bottom : Number
Core/PerspectiveOffCenterFrustum.js 71

Defines the bottom clipping plane.

Default Value: `undefined`

#### far : Number
Core/PerspectiveOffCenterFrustum.js 87

The distance of the far plane.

Default Value: `500000000.0`

#### readonly infiniteProjectionMatrix : Matrix4
Core/PerspectiveOffCenterFrustum.js 151

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

##### See:

- PerspectiveOffCenterFrustum#projectionMatrix

#### left : Number
Core/PerspectiveOffCenterFrustum.js 47

Defines the left clipping plane.

Default Value: `undefined`

#### near : Number
Core/PerspectiveOffCenterFrustum.js 79

The distance of the near plane.

Default Value: `1.0`

#### readonly projectionMatrix : Matrix4
Core/PerspectiveOffCenterFrustum.js 136

Gets the perspective projection matrix computed from the view frustum.

##### See:

- PerspectiveOffCenterFrustum#infiniteProjectionMatrix

#### right : Number
Core/PerspectiveOffCenterFrustum.js 55

Defines the right clipping plane.

Default Value: `undefined`

#### top : Number
Core/PerspectiveOffCenterFrustum.js 63

Defines the top clipping plane.

Default Value: `undefined`

### Methods

#### clone(result) → PerspectiveOffCenterFrustum
Core/PerspectiveOffCenterFrustum.js 376

Returns a duplicate of a PerspectiveOffCenterFrustum instance.

Name | Type | Description
--- | --- | ---
`result` | PerspectiveOffCenterFrustum | 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
Core/PerspectiveOffCenterFrustum.js 176

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.
    var cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);
    var intersect = cullingVolume.computeVisibility(boundingVolume);

#### equals(other) → Boolean
Core/PerspectiveOffCenterFrustum.js 406

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

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

##### Returns:

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

#### equalsEpsilon(other, relativeEpsilon, absoluteEpsilon) → Boolean
Core/PerspectiveOffCenterFrustum.js 429

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

Name | Type | Default | Description
--- | --- | --- | ---
`other` | PerspectiveOffCenterFrustum |  | The right hand side PerspectiveOffCenterFrustum.
`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
Core/PerspectiveOffCenterFrustum.js 332

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.
    var 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.
    var position = camera.position;
    var direction = camera.direction;
    var toCenter = Cesium.Cartesian3.subtract(primitive.boundingVolume.center, position, new Cesium.Cartesian3());      // vector from camera to a primitive
    var toCenterProj = Cesium.Cartesian3.multiplyByScalar(direction, Cesium.Cartesian3.dot(direction, toCenter), new Cesium.Cartesian3()); // project vector onto camera direction vector
    var distance = Cesium.Cartesian3.magnitude(toCenterProj);
    var pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, distance, scene.pixelRatio, new Cesium.Cartesian2());