创建一个 OrientedBoundingBox(有向包围盒)实例。
某些对象的有向包围盒是一个封闭且凸的长方体。在许多情况下,它能比
BoundingSphere 或 AxisAlignedBoundingBox 提供更紧密的包围体。
| 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
将该对象打包进数组时使用的元素数量。
盒体的中心。
-
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 出发、与包围盒相交的平面中最近和最远平面的距离。
如果你想象存在无数个以 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 实例。
计算从包围盒上最接近给定点的点到该点的距离平方的估计值。
| 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);
});
逐分量比较所提供的 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
| 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 表示盒体与平面相交。
判断一个包围盒是否被遮挡体遮挡而不可见。
| Name | Type | Description |
|---|---|---|
box |
OrientedBoundingBox | 包围被遮挡物对象的包围盒。 |
occluder |
Occluder | 遮挡体。 |
Returns:
若包围盒不可见则为
true,否则为 false。
将所提供的实例存储到所提供的数组中。
| 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 实例。
clone(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 出发、与包围盒相交的平面中最近和最远平面的距离。
如果你想象存在无数个以 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 实例。
计算从包围盒上最接近给定点的点到该点的距离平方的估计值。
| 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。
intersectPlane(plane) → Intersect
确定有向包围盒位于平面的哪一侧。
| Name | Type | Description |
|---|---|---|
plane |
Plane | 要测试的平面。 |
Returns:
Intersect.INSIDE 表示整个盒体位于平面法向所指向的一侧;
Intersect.OUTSIDE 表示整个盒体位于相反的一侧;
Intersect.INTERSECTING 表示盒体与平面相交。
判断一个包围盒是否被遮挡体遮挡而不可见。
| Name | Type | Description |
|---|---|---|
occluder |
Occluder | 遮挡体。 |
Returns:
若球体不可见则为
true,否则为 false。
