OrientedBoundingBox

new Cesium.OrientedBoundingBox(center, halfAxes)

创建一个 OrientedBoundingBox(有向包围盒)实例。 某些对象的有向包围盒是一个封闭且凸的长方体。在许多情况下,它能比 BoundingSphereAxisAlignedBoundingBox 提供更紧密的包围体。
Name Type Default Description
center Cartesian3 Cartesian3.ZERO optional 盒体的中心。
halfAxes Matrix3 Matrix3.ZERO optional The 包围盒的三个正交半轴。等价地,也表示一个变换矩阵,用于对以原点为中心的 2x2x2 立方体进行旋转和缩放。
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:

Members

static Cesium.OrientedBoundingBox.packedLength : number

将该对象打包进数组时使用的元素数量。
盒体的中心。
Default Value: Cartesian3.ZERO
包围盒的三个正交半轴。等价地,也表示一个变换矩阵,用于对以原点为中心的 2x2x2 立方体进行旋转和缩放。
Default Value: Matrix3.ZERO

Methods

static Cesium.OrientedBoundingBox.clone(box, result)OrientedBoundingBox

复制一个 OrientedBoundingBox 实例。
Name Type Description
box OrientedBoundingBox 要复制的包围盒。
result OrientedBoundingBox optional 用于存储结果的对象。
Returns:
被修改的 result 参数;如果未提供,则为一个新的 OrientedBoundingBox 实例。(如果 box 为 undefined 则返回 undefined)

static Cesium.OrientedBoundingBox.computeCorners(box, result)Array.<Cartesian3>

计算有向包围盒的八个角点。角点按 (-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 有向包围盒。
result Array.<Cartesian3> optional 用于存储角点的八个 Cartesian3 实例组成的数组。
Returns:
被修改的 result 参数;如果未提供,则为一个新的数组。

static Cesium.OrientedBoundingBox.computePlaneDistances(box, position, direction, result)Interval

由从包围盒中心指向 position、并投影到 direction 上的向量计算得到的各个距离。
如果你想象存在无数个以 direction 为法向的平面,此函数计算从 position 出发、与包围盒相交的平面中最近和最远平面的距离。
Name Type Description
box OrientedBoundingBox 要计算距离的包围盒。
position Cartesian3 计算距离时所处的位置。
direction Cartesian3 从 position 出发的方向。
result Interval optional 用于存储最近和最远距离的 Interval。
Returns:
从 position 沿 direction 方向到包围盒的最近和最远距离。

static Cesium.OrientedBoundingBox.computeTransformation(box, result)Matrix4

从有向包围盒计算一个变换矩阵。
Name Type Description
box OrientedBoundingBox 有向包围盒。
result Matrix4 用于存储结果的对象。
Returns:
被修改的 result 参数;如果未提供,则为一个新的 Matrix4 实例。

static Cesium.OrientedBoundingBox.distanceSquaredTo(box, cartesian)number

计算从包围盒上最接近给定点的点到该点的距离平方的估计值。
Name Type Description
box OrientedBoundingBox 包围盒。
cartesian Cartesian3
Returns:
从有向包围盒到该点的距离平方。如果点在盒体内,则返回 0。
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

逐分量比较所提供的 OrientedBoundingBox,相等时返回 true,否则返回 false
Name Type Description
left OrientedBoundingBox optional 第一个 OrientedBoundingBox。
right OrientedBoundingBox optional 第二个 OrientedBoundingBox。
Returns:
若 left 与 right 相等则为 true,否则为 false

static Cesium.OrientedBoundingBox.fromPoints(positions, result)OrientedBoundingBox

计算包含给定位置的 OrientedBoundingBox 实例。 这是 Stefan Gottschalk 的“使用有向包围盒进行碰撞查询”方案(博士论文)的实现。 参考:http://gamma.cs.unc.edu/users/gottschalk/main.pdf
Name Type Description
positions Array.<Cartesian3> optional 包围盒将包围的 Cartesian3 点列表。
result OrientedBoundingBox optional 用于存储结果的对象。
Returns:
被修改的 result 参数;如果未提供,则为一个新的 OrientedBoundingBox 实例。
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

计算包围位于 Ellipsoid 表面上的 Rectangle 的 OrientedBoundingBox。 无法保证该包围盒的朝向。
Name Type Default Description
rectangle Rectangle 椭球表面上的地理矩形(cartographic rectangle)。
minimumHeight number 0.0 optional 瓦片内的最小高度(海拔)。
maximumHeight number 0.0 optional 瓦片内的最大高度(海拔)。
ellipsoid Ellipsoid Ellipsoid.default optional 定义该矩形所基于的椭球。
result OrientedBoundingBox optional 用于存储结果的对象。
Returns:
被修改的 result 参数;如果未提供,则为一个新的 OrientedBoundingBox 实例。
Throws:
  • DeveloperError :rectangle.width 必须在 0 到 2 * pi 之间。
  • DeveloperError :rectangle.height 必须在 0 到 pi 之间。
  • DeveloperError :ellipsoid 必须是一个旋转椭球(radii.x == radii.y

static Cesium.OrientedBoundingBox.fromTransformation(transformation, result)OrientedBoundingBox

计算包围一个仿射变换(affine transformation)的 OrientedBoundingBox。
Name Type Description
transformation Matrix4 仿射变换。
result OrientedBoundingBox optional 用于存储结果的对象。
Returns:
被修改的 result 参数;如果未提供,则为一个新的 OrientedBoundingBox 实例。

static Cesium.OrientedBoundingBox.intersectPlane(box, plane)Intersect

确定有向包围盒位于平面的哪一侧。
Name Type Description
box OrientedBoundingBox 要测试的包围盒。
plane Plane 要测试的平面。
Returns:
Intersect.INSIDE 表示整个盒体位于平面法向所指向的一侧; Intersect.OUTSIDE 表示整个盒体位于相反的一侧; Intersect.INTERSECTING 表示盒体与平面相交。

static Cesium.OrientedBoundingBox.isOccluded(box, occluder)boolean

判断一个包围盒是否被遮挡体遮挡而不可见。
Name Type Description
box OrientedBoundingBox 包围被遮挡物对象的包围盒。
occluder Occluder 遮挡体。
Returns:
若包围盒不可见则为 true,否则为 false

static Cesium.OrientedBoundingBox.pack(value, array, startingIndex)Array.<number>

将所提供的实例存储到所提供的数组中。
Name Type Default Description
value OrientedBoundingBox 要打包的值。
array Array.<number> 要打包进的数组。
startingIndex number 0 optional 数组中开始打包元素的索引。
Returns:
被打包进的数组

static Cesium.OrientedBoundingBox.unpack(array, startingIndex, result)OrientedBoundingBox

从打包后的数组中取出一个实例。
Name Type Default Description
array Array.<number> 已打包的数组。
startingIndex number 0 optional 要解包的元素起始索引。
result OrientedBoundingBox optional 用于存储结果的对象。
Returns:
被修改的 result 参数;如果未提供,则为一个新的 OrientedBoundingBox 实例。
复制此 OrientedBoundingBox 实例。
Name Type Description
result OrientedBoundingBox optional 用于存储结果的对象。
Returns:
被修改的 result 参数;如果未提供,则为一个新的 OrientedBoundingBox 实例。

computeCorners(result)Array.<Cartesian3>

计算有向包围盒的八个角点。角点按 (-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 用于存储角点的八个 Cartesian3 实例组成的数组。
Returns:
被修改的 result 参数;如果未提供,则为一个新的数组。

computePlaneDistances(position, direction, result)Interval

由从包围盒中心指向 position、并投影到 direction 上的向量计算得到的各个距离。
如果你想象存在无数个以 direction 为法向的平面,此函数计算从 position 出发、与包围盒相交的平面中最近和最远平面的距离。
Name Type Description
position Cartesian3 计算距离时所处的位置。
direction Cartesian3 从 position 出发的方向。
result Interval optional 用于存储最近和最远距离的 Interval。
Returns:
从 position 沿 direction 方向到包围盒的最近和最远距离。

computeTransformation(result)Matrix4

从有向包围盒计算一个变换矩阵。
Name Type Description
result Matrix4 用于存储结果的对象。
Returns:
被修改的 result 参数;如果未提供,则为一个新的 Matrix4 实例。

distanceSquaredTo(cartesian)number

计算从包围盒上最接近给定点的点到该点的距离平方的估计值。
Name Type Description
cartesian Cartesian3
Returns:
从包围球到该点的距离平方的估计值。
Example:
// Sort bounding boxes from back to front
boxes.sort(function(a, b) {
    return b.distanceSquaredTo(camera.positionWC) - a.distanceSquaredTo(camera.positionWC);
});
将此 OrientedBoundingBox 与所提供的 OrientedBoundingBox 逐分量比较,相等时返回 true,否则返回 false
Name Type Description
right OrientedBoundingBox optional 右侧的 OrientedBoundingBox。
Returns:
若它们相等则为 true,否则为 false
确定有向包围盒位于平面的哪一侧。
Name Type Description
plane Plane 要测试的平面。
Returns:
Intersect.INSIDE 表示整个盒体位于平面法向所指向的一侧; Intersect.OUTSIDE 表示整个盒体位于相反的一侧; Intersect.INTERSECTING 表示盒体与平面相交。

isOccluded(occluder)boolean

判断一个包围盒是否被遮挡体遮挡而不可见。
Name Type Description
occluder Occluder 遮挡体。
Returns:
若球体不可见则为 true,否则为 false
需要帮助?获取答案的最快方式是在 Cesium 论坛 上向社区和团队提问。