cesium 中primitives 和 entities的区别

210 阅读2分钟

Cesium 中,this.scene.primitives.addthis.viewer.entities.add 都可以用于添加图像或几何体,但它们的本质区别在于底层渲染机制和数据管理方式

主要区别

特性scene.primitives.addviewer.entities.add
底层实现直接操作 Primitive API通过 Entity API 间接管理 Primitive
数据存储原始 WebGL 资源(Mesh、Geometry、Appearance)Entity-Component 模型(由 DataSource 维护)
性能更高,直接渲染较低,但更易管理
适用于高频率更新、大量复杂图形少量动态变化、需要数据管理的对象
支持功能手动管理几何、材质、纹理、Shader内置属性更新(如位置、颜色)
事件管理需要手动监听自带 entity.changed 事件
拾取/交互需要自己处理直接支持 viewer.selectedEntity

哪个更适合高频率更新?

如果你需要绘制复杂图像,并且坐标和材质更新频率非常高,那么:

  1. 推荐使用 scene.primitives.add,因为它直接操作底层 WebGL,性能更高。
  2. viewer.entities.add 由于内部数据管理的开销(如 EntityCollectionDataSource),更新速度不如 primitives 快,适用于低频率更新。

为什么 scene.primitives.add 更快?

  • Primitives 直接管理 Geometry,避免了 Entity 层的数据同步开销。
  • Entity 在内部使用 DataSource,会引入额外的 数据解析对象管理,导致性能损耗。
  • Primitives 可以使用 Batching(批量渲染)来优化性能,而 Entities 需要单独处理。

总结

  • 如果追求性能,使用 scene.primitives.add
  • 如果需要方便的属性管理、事件监听,使用 viewer.entities.add
  • 对于高频动态更新(坐标、材质),primitives 更合适。
  • 对于较少的对象,并且涉及属性交互、拾取的情况,entities 更方便。

如果你的场景中涉及大量动态变化的点云、实时轨迹线、雷达扫描面等,建议用 Primitive,配合 PrimitiveCollectionAppearance 自定义渲染方式。