使用场景
与 Entity 的对比
Primitive提供了几何实例化技术,可以复用Geometry,并且将多个Geometry合并为一个大的Geometry,减少程序性能开销。
同样的创建1万个盒子,可以看到两者的内存占用差了3倍。

使用Entity只能绘制指定类型的几何图形,但是使用Primitive我们可以自定义几何图形。
Primitive提供了操作图形顶点着色器和片元着色器的入口,还可以自定义渲染状态,可以实现很多Entity无法实现的效果。
缺点
使用复杂
使用Primitive创建图形相比Entity来说更为复杂,Entity绘制图形都是通过Entity类实现,而Primitive绘制不同的图形需要不同的Primitive类。
以创建一个Box为例,Entity的方式
ts
let position = Cesium.Cartesian3.fromDegrees(
124.21936679679918,
45.85136872098397,
10
);
viewer.entities.add({
position: position,
box: {
dimensions: new Cesium.Cartesian3(100, 100, 100),
material: Cesium.Color.WHITE,
},
});使用Primitive的方式
ts
let position = Cesium.Cartesian3.fromDegrees(
124.21936679679918,
45.85136872098397,
10
);
let instance = new Cesium.GeometryInstance({
geometry: geometry,
modelMatrix: Cesium.Transforms.eastNorthUpToFixedFrame(position),
});
let primitive = viewer.scene.primitives.add(
new Cesium.Primitive({
geometryInstances: instance,
appearance: new Cesium.EllipsoidSurfaceAppearance({
material: Cesium.Material.fromType("Color"),
}),
})
);灵活度低
使用Entity创建的图形可以很方便地更新各种参数,但是使用Primitive创建的图形要更新各种参数是很难得,大多数时候只能删除重建,特别是使用实例化几何组合多个图形的时候。