Skip to content

使用场景

Entity 的对比

Primitive提供了几何实例化技术,可以复用Geometry,并且将多个Geometry合并为一个大的Geometry,减少程序性能开销。

同样的创建1万个盒子,可以看到两者的内存占用差了3倍。

entityvsprimitive

使用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创建的图形要更新各种参数是很难得,大多数时候只能删除重建,特别是使用实例化几何组合多个图形的时候。

MGis 地理三维库