PerspectiveFrustum

new Cesium.PerspectiveFrustum(options)

视锥体由 6 个平面定义。 每个平面由一个 Cartesian4 对象表示,其中 x、y 和 z 分量 定义平面的单位法向量,w 分量是 平面到原点/相机位置的距离。
Name Type Description
options object optional 具有以下属性的对象:
Name Type Default Description
fov number optional 视野角度(FOV),以弧度为单位。
aspectRatio number optional 视锥体宽度与高度的宽高比。
near number 1.0 optional 近平面的距离。
far number 500000000.0 optional 远平面的距离。
xOffset number 0.0 optional x 方向的偏移量。
yOffset number 0.0 optional y 方向的偏移量。
Example:
const frustum = new Cesium.PerspectiveFrustum({
    fov : Cesium.Math.PI_OVER_THREE,
    aspectRatio : canvas.clientWidth / canvas.clientHeight
    near : 1.0,
    far : 1000.0
});
See:

Members

static Cesium.PerspectiveFrustum.packedLength : number

用于将对象打包到数组中的元素数量。

aspectRatio : number|undefined

视锥体宽度与高度的宽高比。
Default Value: undefined
远平面的距离。
Default Value: 500000000.0
视野角度(FOV),以弧度为单位。如果宽度大于高度,此角度将用作水平 FOV,否则将用作垂直 FOV。
Default Value: undefined

readonly fovy : number|undefined

获取垂直视野角度,以弧度为单位。
Default Value: undefined

readonly infiniteProjectionMatrix : Matrix4

具有无限远平面的视锥体计算的透视投影矩阵。
See:
近平面的距离。
Default Value: 1.0
获取根据视锥体计算的透视投影矩阵。 如有必要,投影矩阵将被重新计算。
See:
在 x 方向上偏移视锥体。
Default Value: 0.0
在 y 方向上偏移视锥体。
Default Value: 0.0

Methods

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

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

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

从打包数组中检索实例。
Name Type Default Description
array Array.<number> 打包的数组。
startingIndex number 0 optional 要解包的元素的起始索引。
result PerspectiveFrustum optional 用于存储结果的对象。
Returns:
修改后的 result 参数,如果未提供,则为新的 PerspectiveFrustum 实例。
返回 PerspectiveFrustum 实例的副本。
Name Type Description
result PerspectiveFrustum optional 用于存储结果的对象。
Returns:
修改后的 result 参数,如果未提供,则为新的 PerspectiveFrustum 实例。

computeCullingVolume(position, direction, up)CullingVolume

为此视锥体创建裁剪体。
Name Type Description
position Cartesian3 眼睛位置。
direction Cartesian3 视图方向。
up Cartesian3 向上方向。
Returns:
给定位置和方向上的裁剪体。
Example:
// 检查边界体是否与视锥体相交。
const cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);
const intersect = cullingVolume.computeVisibility(boundingVolume);
逐分量比较提供的 PerspectiveFrustum, 如果相等则返回 true,否则返回 false
Name Type Description
other PerspectiveFrustum optional 右侧的 PerspectiveFrustum。
Returns:
如果它们相等则返回 true,否则返回 false

equalsEpsilon(other, relativeEpsilon, absoluteEpsilon)boolean

逐分量比较提供的 PerspectiveFrustum, 如果通过绝对或相对容差测试则返回 true,否则返回 false
Name Type Default Description
other PerspectiveFrustum 右侧的 PerspectiveFrustum。
relativeEpsilon number 用于相等性测试的相对 epsilon 容差。
absoluteEpsilon number relativeEpsilon optional 用于相等性测试的绝对 epsilon 容差。
Returns:
如果此对象和另一个对象在提供的 epsilon 范围内,则返回 true,否则返回 false

getPixelDimensions(drawingBufferWidth, drawingBufferHeight, distance, pixelRatio, result)Cartesian2

返回像素的宽度和高度(以米为单位)。
Name Type Description
drawingBufferWidth number 绘图缓冲区的宽度。
drawingBufferHeight number 绘图缓冲区的高度。
distance number 到近平面的距离,以米为单位。
pixelRatio number 从像素空间到坐标空间的缩放比例。
result Cartesian2 用于存储结果的对象。
Returns:
修改后的 result 参数,或者一个新的 Cartesian2 实例,其 x 和 y 属性分别为像素的宽度和高度。
Throws:
Examples:
// 示例 1
// 获取像素的宽度和高度。
const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 1.0, scene.pixelRatio, new Cesium.Cartesian2());
// 示例 2
// 如果将近平面设置为 'distance',获取像素的宽度和高度。
// 例如,获取广告牌上图像的像素大小。
const position = camera.position;
const direction = camera.direction;
const toCenter = Cesium.Cartesian3.subtract(primitive.boundingVolume.center, position, new Cesium.Cartesian3());      // 从相机到图元的向量
const toCenterProj = Cesium.Cartesian3.multiplyByScalar(direction, Cesium.Cartesian3.dot(direction, toCenter), new Cesium.Cartesian3()); // 将向量投影到相机方向向量上
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.