1 | new PerInstanceColorAppearance({ |
PerInstanceColorAppearance 是 CesiumJS 中用于渲染具有每实例颜色的几何体的外观类。它允许为每个实例指定不同的颜色,从而实现丰富的视觉效果。以下是对 PerInstanceColorAppearance 的一些关键点和使用方法的笔记:
基本概念:
- PerInstanceColorAppearance 继承自 Appearance 类,专门用于处理每实例颜色的渲染。
- 它通常与 InstancedGeometry(实例化几何体)一起使用,以提高渲染性能。
- 每个实例可以通过 Instance 属性中的 color 属性来指定颜色。
- 属性:
flat:布尔值,指示是否使用平面着色。如果为 true,则几何体将以平面方式渲染,没有光照效果。translucent:布尔值,指示几何体是否是半透明的。如果为 true,则几何体将支持透明度。- 如下所示:
- flat: true 禁用基于法线的光照计算(即不做漫反射/镜面高光等照明),表面颜色直接使用材质/顶点颜色。适合平面、UI 样式或希望颜色恒定且性能更好的情况。
- translucent: false 表示材质为不透明,Cesium 会把它放到不透明渲染通道:写入深度缓冲、无需排序,也不会进行混合。若需要半透明效果,应设为 true 并提供 alpha 值及合适的渲染状态(如关闭深度写入或启用混合)
使用场景:
- 适用于需要渲染大量具有不同颜色的实例化几何体的场景,例如点云、粒子系统等。
- 可以用于可视化数据,其中每个数据点需要不同的颜色表示。
示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20const instance = new GeometryInstance({
geometry: new BoxGeometry({
vertexFormat: PerInstanceColorAppearance.VERTEX_FORMAT,
maximum: new Cartesian3(1.0, 1.0, 1.0),
minimum: new Cartesian3(-1.0, -1.0, -1.0),
}),
modelMatrix: Matrix4.fromTranslation(new Cartesian3(0.0, 0.0, 0.0)),
attributes: {
color: ColorGeometryInstanceAttribute.fromColor(Color.RED),
},
});
const appearance = new PerInstanceColorAppearance({
flat: true,
translucent: false,
});
const primitive = new Primitive({
geometryInstances: [instance],
appearance: appearance,
});
viewer.scene.primitives.add(primitive);性能优化:
- 使用 PerInstanceColorAppearance 可以显著提高渲染大量实例的性能,因为它利用了 GPU 的实例化渲染技术。
- 通过合理设置
flat和translucent属性,可以根据需求优化渲染效果和性能。
限制:
- PerInstanceColorAppearance 主要用于简单的颜色渲染,不支持复杂的材质效果,如纹理映射或光照计算。
- 适用于需要高性能渲染的场景,但在需要复杂视觉效果时,可能需要考虑其他外观类。
总结:
- PerInstanceColorAppearance 是 CesiumJS 中一个强大的工具,适用于需要渲染大量具有不同颜色的实例化几何体的场景。通过合理使用其属性和方法,可以实现高效且丰富的视觉效果。
