可渲染的广告牌集合。广告牌是定位在 3D 场景中且与视口对齐的
图像。

示例广告牌
使用

示例广告牌
使用
BillboardCollection#add
和 BillboardCollection#remove 向集合中添加和移除广告牌。集合中的广告牌会自动为具有相同标识符的图像共享纹理。
Performance:
为了获得最佳性能,最好使用几个包含许多广告牌的集合,而不是 许多只包含几个广告牌的集合。组织集合,使具有相同 更新频率的广告牌在同一集合中,即不更改的 广告牌应在一个集合中;每帧更改的广告牌应在另一个 集合中;依此类推。
| Name | Type | Description | ||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
options |
object |
optional
具有以下属性的对象:
|
Example:
// 创建一个包含两个广告牌的集合
const billboards = scene.primitives.add(new Cesium.BillboardCollection());
billboards.add({
position : new Cesium.Cartesian3(1.0, 2.0, 3.0),
image : 'url/to/image'
});
billboards.add({
position : new Cesium.Cartesian3(4.0, 5.0, 6.0),
image : 'url/to/another/image'
});
Demo:
See:
Members
blendOption : BlendOption
广告牌混合选项。默认值用于渲染不透明和半透明广告牌。
但是,如果所有广告牌都是完全不透明或完全半透明的,
将技术设置为 BlendOption.OPAQUE 或 BlendOption.TRANSLUCENT 可以将
性能提高多达 2 倍。
-
Default Value:
BlendOption.OPAQUE_AND_TRANSLUCENT
从相机到此距离之外,广告牌将针对地球椭球体的近似值进行深度测试,
而不是针对完整的地球深度缓冲区。当设置为
此设置仅当广告牌的
0 时,
始终应用近似深度测试。当设置为 Number.POSITIVE_INFINITY 时,
从不应用近似深度测试。
此设置仅当广告牌的
Billboard#disableDepthTestDistance 值
允许深度测试时才适用——即从相机到广告牌的距离小于
广告牌的 Billboard#disableDepthTestDistance 值。
此属性仅用于调试;不用于生产环境且未进行优化。
绘制图元中每个绘制命令的包围球。
-
Default Value:
false
此属性仅用于调试;不用于生产环境且未进行优化。
将此 BillboardCollection 的纹理图集绘制为全屏四边形。
-
Default Value:
false
返回此集合中广告牌的数量。通常与
BillboardCollection#get 配合使用以遍历集合中的所有广告牌。
modelMatrix : Matrix4
将集合中的每个广告牌从模型坐标变换到世界坐标的 4x4 变换矩阵。
当此矩阵为单位矩阵时,广告牌在世界坐标(即地球的 WGS84 坐标)中绘制。
可以通过提供不同的变换矩阵来使用局部参考系,例如由
Transforms.eastNorthUpToFixedFrame 返回的矩阵。
-
Default Value:
Matrix4.IDENTITY
Example:
const center = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);
billboards.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(center);
billboards.add({
image : 'url/to/image',
position : new Cesium.Cartesian3(0.0, 0.0, 0.0) // 中心
});
billboards.add({
image : 'url/to/image',
position : new Cesium.Cartesian3(1000000.0, 0.0, 0.0) // 东
});
billboards.add({
image : 'url/to/image',
position : new Cesium.Cartesian3(0.0, 1000000.0, 0.0) // 北
});
billboards.add({
image : 'url/to/image',
position : new Cesium.Cartesian3(0.0, 0.0, 1000000.0) // 上
});
See:
确定此集合中的广告牌是否将显示。
-
Default Value:
true
从相机到此距离之内,具有
此设置仅当广告牌的
Billboard#heightReference 值
HeightReference.CLAMP_TO_GROUND 或 HeightReference.CLAMP_TO_TERRAIN 的
广告牌将针对三个关键点进行深度测试。这确保了如果广告牌的任何关键点可见,
则整个广告牌都将可见。当设置为 0 时,此功能被禁用,
地形后方的广告牌部分将被裁剪。
此设置仅当广告牌的
Billboard#disableDepthTestDistance 值
允许深度测试时才适用——即从相机到广告牌的距离小于
广告牌的 Billboard#disableDepthTestDistance 值。
Methods
add(options) → Billboard
创建并向集合中添加具有指定初始属性的广告牌。
返回添加的广告牌,以便稍后可以修改或从集合中移除。
Performance:
调用 add 预期为常数时间。但是,集合的顶点缓冲区
会被重写——这是一个 O(n) 操作,也会产生 CPU 到 GPU 的开销。为了
获得最佳性能,请在调用 update 之前尽可能多地添加广告牌。
| Name | Type | Description |
|---|---|---|
options |
Billboard.ConstructorOptions | optional 描述广告牌属性的模板,如示例 1 所示。 |
Returns:
添加到集合的广告牌。
Throws:
-
DeveloperError : 此对象已被销毁,即调用了 destroy()。
Examples:
// 示例 1:添加广告牌,指定所有默认值。
const b = billboards.add({
show : true,
position : Cesium.Cartesian3.ZERO,
pixelOffset : Cesium.Cartesian2.ZERO,
eyeOffset : Cesium.Cartesian3.ZERO,
heightReference : Cesium.HeightReference.NONE,
horizontalOrigin : Cesium.HorizontalOrigin.CENTER,
verticalOrigin : Cesium.VerticalOrigin.CENTER,
scale : 1.0,
image : 'url/to/image',
imageSubRegion : undefined,
color : Cesium.Color.WHITE,
id : undefined,
rotation : 0.0,
alignedAxis : Cesium.Cartesian3.ZERO,
width : undefined,
height : undefined,
scaleByDistance : undefined,
translucencyByDistance : undefined,
pixelOffsetScaleByDistance : undefined,
sizeInMeters : false,
distanceDisplayCondition : undefined
});
// 示例 2:仅指定广告牌的笛卡尔坐标位置。
const b = billboards.add({
position : Cesium.Cartesian3.fromDegrees(longitude, latitude, height)
});
See:
检查此集合是否包含给定的广告牌。
| Name | Type | Description |
|---|---|---|
billboard |
Billboard | optional 要检查的广告牌。 |
Returns:
如果此集合包含该广告牌则返回 true,否则返回 false。
销毁此对象持有的 WebGL 资源。销毁对象可以确定性地
释放 WebGL 资源,而不是依赖垃圾回收器来销毁此对象。
对象销毁后,不应再使用;调用除
对象销毁后,不应再使用;调用除
isDestroyed 之外的任何函数都将导致 DeveloperError 异常。因此,
如示例所示,将返回值(undefined)赋给该对象。
Throws:
-
DeveloperError : 此对象已被销毁,即调用了 destroy()。
Example:
billboards = billboards && billboards.destroy();
See:
get(index) → Billboard
返回集合中指定索引处的广告牌。索引从零开始
并随着广告牌的添加而增加。移除广告牌会将其后的所有广告牌
向左移动,从而改变它们的索引。此函数通常与
BillboardCollection#length 配合使用以遍历集合中的所有广告牌。
Performance:
预期为常数时间。如果从集合中移除了广告牌且
未调用 BillboardCollection#update,则会执行隐式的 O(n)
操作。
| Name | Type | Description |
|---|---|---|
index |
number | 广告牌的从零开始的索引。 |
Returns:
指定索引处的广告牌。
Throws:
-
DeveloperError : 此对象已被销毁,即调用了 destroy()。
Example:
// 切换集合中每个广告牌的 show 属性
const len = billboards.length;
for (let i = 0; i < len; ++i) {
const b = billboards.get(i);
b.show = !b.show;
}
See:
Returns:
如果此对象已被销毁则返回
true;否则返回 false。
从集合中移除一个广告牌。
Performance:
调用 remove 预期为常数时间。但是,集合的顶点缓冲区
会被重写——这是一个 O(n) 操作,也会产生 CPU 到 GPU 的开销。为了
获得最佳性能,请在调用 update 之前尽可能多地移除广告牌。
如果打算临时隐藏广告牌,通常调用
Billboard#show 比移除并重新添加广告牌更高效。
| Name | Type | Description |
|---|---|---|
billboard |
Billboard | 要移除的广告牌。 |
Returns:
如果广告牌被移除则返回
true;如果在集合中未找到广告牌则返回 false。
Throws:
-
DeveloperError : 此对象已被销毁,即调用了 destroy()。
Example:
const b = billboards.add(...);
billboards.remove(b); // 返回 true
See:
从集合中移除所有广告牌。
Performance:
O(n)。从集合中移除所有广告牌
然后添加新的广告牌,比完全创建一个新集合更高效。
Throws:
-
DeveloperError : 此对象已被销毁,即调用了 destroy()。
Example:
billboards.add(...);
billboards.add(...);
billboards.removeAll();
See:
Throws:
-
RuntimeError : 具有 id 的图像必须在图集中。
