Entity 和 Primitive 的区别

758 阅读1分钟

二者的优缺点

Primitive

Primitive更多的是面向图形开发人员的底层API,暴露最小限度的抽象,更多使用图形学术语,具有更大的灵活性

  • 优势 1、绘制大量 Primitive 时,可以将其合并为单个 Geometry ,减轻CPU负担,更好使用GPU,性能更好 2、GeometryAppearance 解耦,两者可独立修改,更加灵活
  • 缺点: 用法复杂,使用 primitive 就意味着需要编写更多代码,以及对图形学深入的了解

1、Entity 偏向数据,Primitive 偏向图形 Primitive 更底层

Entity

Entity 是更高级别的数据驱动API,它使用一致性设计的、高级别对象来管理一组相关性的可视化对象,其底层也是使用的 Primitive

  • 优势 1、用法简单,可设置各种各样的附加属性

分别用 Entity 和 Primitive 方式绘制图形

    let points = turf.randomPoint(10000, { bbox: [40, 20, 255, 60] });
    let features = points.features;
    let feature, geom, coordinates, position;
    
    // 广告牌的可渲染集合
    var billboards = viewer.scene.primitives.add(
        new Cesium.BillboardCollection()
    );

    for (let i = 0; i < features.length; i++) {
        feature = features[i];
        geom = feature.geometry;
        coordinates = geom.coordinates;
        position = Cesium.Cartesian3.fromDegrees(
            coordinates[0],
            coordinates[1],
            0
        );
        addEntities(position);
    }

使用 Entity 绘制

    function addEntities (position) {
        viewer.entities.add({
            position: position,
            billboard: {
                image: "./imgs/01.jpg",
                verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
            },
        });
    }

浏览器内存消耗情况

image.png

使用 Primitive 绘制

这里使用 BillboardCollection 提升性能

    function addPrimitive (position) {
        billboards.add({
            position: position,
            image: './imgs/01.jpg',
            verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
        })
    }

image.png