PerspectiveFrustum

视锥由6个平面定义。每个平面由一个Cartesian4对象表示,其中X、Y和Z分量定义垂直于平面的单位向量,而W分量是平面与原点/相机位置之间的距离。
new PerspectiveFrustum(options)
Parameters:
options (Object) 一个
Name Description
options.fov
Number
视场的角度(FOV),以弧度表示。
options.aspectRatio
Number
截锥的宽度和高度的纵横比。
options.near
Number
default 1.0
近平面的距离。
options.far
Number
default 500000000.0
远平面的距离。
options.xOffset
Number
default 0.0
X方向的偏移量。
options.yOffset
Number
default 0.0
Y方向的偏移。
Example
var frustum = new bmgl.PerspectiveFrustum({
    fov : bmgl.Math.PI_OVER_THREE,
    aspectRatio : canvas.clientWidth / canvas.clientHeight
    near : 1.0,
    far : 1000.0
});
See:

Members

(static) packedLength : Number

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

aspectRatio : Number

截锥的宽度和高度的纵横比。
Default Value: undefined

far : Number

远平面的距离。
Default Value: 500000000.0

fov : Number

视场的角度(FOV),以弧度表示。如果宽度大于高度,此角度将用作水平视野,否则将用作垂直视野。
Default Value: undefined

(readonly) fovy : Number

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

(readonly) infiniteProjectionMatrix : Matrix4

从具有无限远平面的视锥计算出的透视投影矩阵。
See:

near : Number

近平面的距离。
Default Value: 1.0

(readonly) projectionMatrix : Matrix4

获取从视图截锥计算的透视投影矩阵。
See:

xOffset : Number

沿X方向偏移截锥。
Default Value: 0.0

yOffset : Number

沿Y方向偏移截锥。
Default Value: 0.0

Methods

(static) pack(value, array, startingIndex) → {Array.<Number>}
将提供的实例存储到提供的数组中。
Parameters:
value (PerspectiveFrustum) 要打包的值。
array (Array.<Number>) 要打包的数组。
startingIndex (Number) (default 0) 数组中开始打包元素的索引。
(static) unpack(array, startingIndex, result) → {PerspectiveFrustum}
从压缩数组中检索实例。
Parameters:
array (Array.<Number>) 压缩数组。
startingIndex (Number) (default 0) 要解包的元素的起始索引。
result (PerspectiveFrustum) 存储结果的对象。
clone(result) → {PerspectiveFrustum}
返回透视截锥实例的副本。
Parameters:
result (PerspectiveFrustum) 存储结果的对象。
computeCullingVolume(position, direction, up) → {CullingVolume}
为此截锥创建剔除体积。
Parameters:
position (Cartesian3) 眼睛的位置。
direction (Cartesian3) 视图方向。
up (Cartesian3) 向上方向。
Example
// Check if a bounding volume intersects the frustum.
var cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);
var intersect = cullingVolume.computeVisibility(boundingVolume);
equals(other) → {Boolean}
比较所提供的透视截锥组件,如果相等则返回true,否则返回false
Parameters:
other (PerspectiveFrustum) 右手侧透视截锥。
equalsEpsilon(other, relativeEpsilon, absoluteEpsilon) → {Boolean}
比较提供的透视截锥组件,如果通过绝对或相对公差测试,则返回true,否则返回false
Parameters:
other (PerspectiveFrustum) 右手侧透视截锥。
relativeEpsilon (Number) 用于等同性测试的相对epsilon公差。
absoluteEpsilon (Number) (default relativeEpsilon) 用于等同性测试的绝对epsilon公差。
getPixelDimensions(drawingBufferWidth, drawingBufferHeight, distance, pixelRatio, result) → {Cartesian2}
返回像素的宽度和高度(以米为单位)。
Parameters:
drawingBufferWidth (Number) 绘图缓冲区的宽度。
drawingBufferHeight (Number) 绘图缓冲区的高度。
distance (Number) 到近平面的距离,单位为米。
pixelRatio (Number) 从像素空间到坐标空间的比例因子。
result (Cartesian2) 存储结果的对象。
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 bmgl.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 = bmgl.Cartesian3.subtract(primitive.boundingVolume.center, position, new bmgl.Cartesian3());      // vector from camera to a primitive
var toCenterProj = bmgl.Cartesian3.multiplyByScalar(direction, bmgl.Cartesian3.dot(direction, toCenter), new bmgl.Cartesian3()); // project vector onto camera direction vector
var distance = bmgl.Cartesian3.magnitude(toCenterProj);
var pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, distance, scene.pixelRatio, new bmgl.Cartesian2());
Throws