# OrientedBoundingBox

#### new Cesium.OrientedBoundingBox(center, halfAxes)
engine/Source/Core/OrientedBoundingBox.js 40

Creates an instance of an OrientedBoundingBox. An OrientedBoundingBox of some object is a closed and convex rectangular cuboid. It can provide a tighter bounding volume than `BoundingSphere` or `AxisAlignedBoundingBox` in many cases.

Name | Type | Default | Description
--- | --- | --- | ---
`center` | Cartesian3 | `Cartesian3.ZERO` | optional The center of the box.
`halfAxes` | Matrix3 | `Matrix3.ZERO` | optional The three orthogonal half-axes of the bounding box. Equivalently, the transformation matrix, to rotate and scale a 2x2x2 cube centered at the origin.

##### Example:

    // Create an OrientedBoundingBox using a transformation matrix, a position where the box will be translated, and a scale.
    const center = new Cesium.Cartesian3(1.0, 0.0, 0.0);
    const halfAxes = Cesium.Matrix3.fromScale(new Cesium.Cartesian3(1.0, 3.0, 2.0), new Cesium.Matrix3());

    const obb = new Cesium.OrientedBoundingBox(center, halfAxes);

##### See:

- BoundingSphere
- BoundingRectangle

### Members

#### static Cesium.OrientedBoundingBox.packedLength : number
engine/Source/Core/OrientedBoundingBox.js 61

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

#### center : Cartesian3
engine/Source/Core/OrientedBoundingBox.js 46

The center of the box.

Default Value: ``Cartesian3.ZERO``

#### halfAxes : Matrix3
engine/Source/Core/OrientedBoundingBox.js 54

The three orthogonal half-axes of the bounding box. Equivalently, the transformation matrix, to rotate and scale a 2x2x2 cube centered at the origin.

Default Value: ``Matrix3.ZERO``

### Methods

#### static Cesium.OrientedBoundingBox.clone(box, result) → OrientedBoundingBox
engine/Source/Core/OrientedBoundingBox.js 646

Duplicates a OrientedBoundingBox instance.

Name | Type | Description
--- | --- | ---
`box` | OrientedBoundingBox | The bounding box to duplicate.
`result` | OrientedBoundingBox | optional The object onto which to store the result.

##### Returns:

The modified result parameter or a new OrientedBoundingBox instance if none was provided. (Returns undefined if box is undefined)

#### static Cesium.OrientedBoundingBox.computeCorners(box, result) → Array.<Cartesian3>
engine/Source/Core/OrientedBoundingBox.js 1030

Computes the eight corners of an oriented bounding box. The corners are ordered by (-X, -Y, -Z), (-X, -Y, +Z), (-X, +Y, -Z), (-X, +Y, +Z), (+X, -Y, -Z), (+X, -Y, +Z), (+X, +Y, -Z), (+X, +Y, +Z).

Name | Type | Description
--- | --- | ---
`box` | OrientedBoundingBox | The oriented bounding box.
`result` | Array.<Cartesian3> | optional An array of eight `Cartesian3` instances onto which to store the corners.

##### Returns:

The modified result parameter or a new array if none was provided.

#### static Cesium.OrientedBoundingBox.computePlaneDistances(box, position, direction, result) → Interval
engine/Source/Core/OrientedBoundingBox.js 892

The distances calculated by the vector from the center of the bounding box to position projected onto direction.
If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the closest and farthest planes from position that intersect the bounding box.

Name | Type | Description
--- | --- | ---
`box` | OrientedBoundingBox | The bounding box to calculate the distance to.
`position` | Cartesian3 | The position to calculate the distance from.
`direction` | Cartesian3 | The direction from position.
`result` | Interval | optional A Interval to store the nearest and farthest distances.

##### Returns:

The nearest and farthest distances on the bounding box from position in direction.

#### static Cesium.OrientedBoundingBox.computeTransformation(box, result) → Matrix4
engine/Source/Core/OrientedBoundingBox.js 1106

Computes a transformation matrix from an oriented bounding box.

Name | Type | Description
--- | --- | ---
`box` | OrientedBoundingBox | The oriented bounding box.
`result` | Matrix4 | The object onto which to store the result.

##### Returns:

The modified result parameter or a new `Matrix4` instance if none was provided.

#### static Cesium.OrientedBoundingBox.distanceSquaredTo(box, cartesian) → number
engine/Source/Core/OrientedBoundingBox.js 737

Computes the estimated distance squared from the closest point on a bounding box to a point.

Name | Type | Description
--- | --- | ---
`box` | OrientedBoundingBox | The box.
`cartesian` | Cartesian3 | The point

##### Returns:

The distance squared from the oriented bounding box to the point. Returns 0 if the point is inside the box.

##### Example:

    // Sort bounding boxes from back to front
    boxes.sort(function(a, b) {
        return Cesium.OrientedBoundingBox.distanceSquaredTo(b, camera.positionWC) - Cesium.OrientedBoundingBox.distanceSquaredTo(a, camera.positionWC);
    });

#### static Cesium.OrientedBoundingBox.equals(left, right) → boolean
engine/Source/Core/OrientedBoundingBox.js 1242

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

Name | Type | Description
--- | --- | ---
`left` | OrientedBoundingBox | optional The first OrientedBoundingBox.
`right` | OrientedBoundingBox | optional The second OrientedBoundingBox.

##### Returns:

`true` if left and right are equal, `false` otherwise.

#### static Cesium.OrientedBoundingBox.fromPoints(positions, result) → OrientedBoundingBox
engine/Source/Core/OrientedBoundingBox.js 140

Computes an instance of an OrientedBoundingBox of the given positions. This is an implementation of Stefan Gottschalk's Collision Queries using Oriented Bounding Boxes solution (PHD thesis). Reference: http://gamma.cs.unc.edu/users/gottschalk/main.pdf

Name | Type | Description
--- | --- | ---
`positions` | Array.<Cartesian3> | optional List of `Cartesian3` points that the bounding box will enclose.
`result` | OrientedBoundingBox | optional The object onto which to store the result.

##### Returns:

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

##### Example:

    // Compute an object oriented bounding box enclosing two points.
    const box = Cesium.OrientedBoundingBox.fromPoints([new Cesium.Cartesian3(2, 0, 0), new Cesium.Cartesian3(-2, 0, 0)]);

#### static Cesium.OrientedBoundingBox.fromRectangle(rectangle, minimumHeight, maximumHeight, ellipsoid, result) → OrientedBoundingBox
engine/Source/Core/OrientedBoundingBox.js 342

Computes an OrientedBoundingBox that bounds a `Rectangle` on the surface of an `Ellipsoid`. There are no guarantees about the orientation of the bounding box.

Name | Type | Default | Description
--- | --- | --- | ---
`rectangle` | Rectangle |  | The cartographic rectangle on the surface of the ellipsoid.
`minimumHeight` | number | `0.0` | optional The minimum height (elevation) within the tile.
`maximumHeight` | number | `0.0` | optional The maximum height (elevation) within the tile.
`ellipsoid` | Ellipsoid | `Ellipsoid.default` | optional The ellipsoid on which the rectangle is defined.
`result` | OrientedBoundingBox |  | optional The object onto which to store the result.

##### Returns:

The modified result parameter or a new OrientedBoundingBox instance if none was provided.

##### Throws:

- DeveloperError : rectangle.width must be between 0 and 2 * pi.
- DeveloperError : rectangle.height must be between 0 and pi.
- DeveloperError : ellipsoid must be an ellipsoid of revolution (`radii.x == radii.y`)

#### static Cesium.OrientedBoundingBox.fromTransformation(transformation, result) → OrientedBoundingBox
engine/Source/Core/OrientedBoundingBox.js 620

Computes an OrientedBoundingBox that bounds an affine transformation.

Name | Type | Description
--- | --- | ---
`transformation` | Matrix4 | The affine transformation.
`result` | OrientedBoundingBox | optional The object onto which to store the result.

##### Returns:

The modified result parameter or a new OrientedBoundingBox instance if none was provided.

#### static Cesium.OrientedBoundingBox.intersectPlane(box, plane) → Intersect
engine/Source/Core/OrientedBoundingBox.js 671

Determines which side of a plane the oriented bounding box is located.

Name | Type | Description
--- | --- | ---
`box` | OrientedBoundingBox | The oriented bounding box to test.
`plane` | Plane | The plane to test against.

##### Returns:

`Intersect.INSIDE` if the entire box is on the side of the plane the normal is pointing, `Intersect.OUTSIDE` if the entire box is on the opposite side, and `Intersect.INTERSECTING` if the box intersects the plane.

#### static Cesium.OrientedBoundingBox.isOccluded(box, occluder) → boolean
engine/Source/Core/OrientedBoundingBox.js 1133

Determines whether or not a bounding box is hidden from view by the occluder.

Name | Type | Description
--- | --- | ---
`box` | OrientedBoundingBox | The bounding box surrounding the occludee object.
`occluder` | Occluder | The occluder.

##### Returns:

`true` if the box is not visible; otherwise `false`.

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

Stores the provided instance into the provided array.

Name | Type | Default | Description
--- | --- | --- | ---
`value` | OrientedBoundingBox |  | 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.OrientedBoundingBox.unpack(array, startingIndex, result) → OrientedBoundingBox
engine/Source/Core/OrientedBoundingBox.js 95

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` | OrientedBoundingBox |  | optional The object into which to store the result.

##### Returns:

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

#### clone(result) → OrientedBoundingBox
engine/Source/Core/OrientedBoundingBox.js 1258

Duplicates this OrientedBoundingBox instance.

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

##### Returns:

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

#### computeCorners(result) → Array.<Cartesian3>
engine/Source/Core/OrientedBoundingBox.js 1210

Computes the eight corners of an oriented bounding box. The corners are ordered by (-X, -Y, -Z), (-X, -Y, +Z), (-X, +Y, -Z), (-X, +Y, +Z), (+X, -Y, -Z), (+X, -Y, +Z), (+X, +Y, -Z), (+X, +Y, +Z).

Name | Type | Description
--- | --- | ---
`result` | Array.<Cartesian3> | optional An array of eight `Cartesian3` instances onto which to store the corners.

##### Returns:

The modified result parameter or a new array if none was provided.

#### computePlaneDistances(position, direction, result) → Interval
engine/Source/Core/OrientedBoundingBox.js 1191

The distances calculated by the vector from the center of the bounding box to position projected onto direction.
If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the closest and farthest planes from position that intersect the bounding box.

Name | Type | Description
--- | --- | ---
`position` | Cartesian3 | The position to calculate the distance from.
`direction` | Cartesian3 | The direction from position.
`result` | Interval | optional A Interval to store the nearest and farthest distances.

##### Returns:

The nearest and farthest distances on the bounding box from position in direction.

#### computeTransformation(result) → Matrix4
engine/Source/Core/OrientedBoundingBox.js 1220

Computes a transformation matrix from an oriented bounding box.

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

##### Returns:

The modified result parameter or a new `Matrix4` instance if none was provided.

#### distanceSquaredTo(cartesian) → number
engine/Source/Core/OrientedBoundingBox.js 1176

Computes the estimated distance squared from the closest point on a bounding box to a point.

Name | Type | Description
--- | --- | ---
`cartesian` | Cartesian3 | The point

##### Returns:

The estimated distance squared from the bounding sphere to the point.

##### Example:

    // Sort bounding boxes from back to front
    boxes.sort(function(a, b) {
        return b.distanceSquaredTo(camera.positionWC) - a.distanceSquaredTo(camera.positionWC);
    });

#### equals(right) → boolean
engine/Source/Core/OrientedBoundingBox.js 1269

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

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

##### Returns:

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

#### intersectPlane(plane) → Intersect
engine/Source/Core/OrientedBoundingBox.js 1160

Determines which side of a plane the oriented bounding box is located.

Name | Type | Description
--- | --- | ---
`plane` | Plane | The plane to test against.

##### Returns:

`Intersect.INSIDE` if the entire box is on the side of the plane the normal is pointing, `Intersect.OUTSIDE` if the entire box is on the opposite side, and `Intersect.INTERSECTING` if the box intersects the plane.

#### isOccluded(occluder) → boolean
engine/Source/Core/OrientedBoundingBox.js 1230

Determines whether or not a bounding box is hidden from view by the occluder.

Name | Type | Description
--- | --- | ---
`occluder` | Occluder | The occluder.

##### Returns:

`true` if the sphere is not visible; otherwise `false`.

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