Primitive
Primitive 是一种面向图形开发人员的底层 API,它提供了对 WebGL 图形的直接访问。它通常用于描述⼀组简单的图形几何体。例如,我们可以使用Primitive来绘制点、线、多边形、体积、⽂本等基本图形。每个Primitive实例都可以设置不同的属性,例如颜⾊、边框、宽度、⾼度等
Primitive通常由以下几个部分组成
1、几何数据:几何数据定义了Primitive图元的三维形状,通常由顶点和索引组成
2、材质:材质定义了Primitive图元的表面外观,包括颜色、纹理等。
3、着色器:着色器是用于计算Primitive图元每个像素的颜色值的程序,它可以根据几何数据和材质计算出最终的像素颜色
用法:
使用Primitive创建圆并渲染到场景中,创建一个Primitive必须设置 geometry与 appearance 两个属性,才能在场景中渲染出来
每个Geometry是通过GeometryInstance来进行实例化的,通过GeometryInstance对Geometry进行实例化,同一个Geometry可以被实例化多次。这对于展示大量数据时很有用,比如有10万个BoxGeometry需要被显示,只需要创建一个BoxGeometry,然后通过GeometryInstance来设置每一个的大小、位置、颜色等
优点:
1、灵活度高,因为Primitive由Geometry和Appearance构成,我们可以单独修改它们
2、性能好,使用Primitive可以将多个Geometry合并为一个大的Geometry来减少CPU的使用,利用GPU
3、自定义渲染强,我们有很大的可编程性,可以操作顶点着色器与片元着色器
4、更接近 WebGL,可以优化渲染流程以提高性能
5、更易于扩展,Primitive图元可以更方便地扩展到大型数据集,而Entity则会遇到性能瓶颈
缺点:
1、对于动态数据不友好,使用primitive组合多个geometry时无法更新geometry
2、更难使用,Primitive图元需要更复杂的代码来创建和管理,因此对开发人员的要求更高
3、较少的⾃动性和灵活性,因为需要⼿动处理许多问题,例如碰撞检测、 ⾼级光照和渲染技术等
4、更难调试,Primitive图元更难调试,因为它们通常包含大量几何数据和着色器代码
Entity
Entity 提供了一种更加高级别的数据驱动 API,它简化了数据和可视化的管理。每个Entity 都可以代表一个现实世界中的对象,并且可以携带各种属性(如位置、速度、模型、纹理等),这些属性会自动映射到底层的Primitive 上 。它通常用于描述具有坐标位置的实际对象,例如⻜机、汽⻋、楼 房、⼈物等。每个Entity实例都有不同的属性,例如位置、姿态、缩放、颜⾊、贴图等,并且可以通过编程⽅式创建、修改、删除
Entity的优点是⾮常灵活和易于使用。由于Entity是更⾼层次的概念,因此它可以⾃动处理许多与底层图 形和几何形状相关的复杂性,例如纹理贴图、光照、碰撞检测等。它还可以与其他Cesium组件集成,例 如事件处理、拾取和相机控制等。
用法:
特点:
1、易于使用:封装了大部分细节,使得开发者可以专注于应用逻辑而不是图形细节
2、一致性设计:API 设计一致,易于理解和记忆
3、动态属性支持:Entities 支持动态属性,这意味着可以轻松地在运行时更改对象的属性,如位置、颜色和形状等
4、性能略逊于 Primitive:虽然封装了细节,但在大规模数据渲染时可能会略逊于直接使用Primitive
总的来说,Entity和Primitive都是Cesium中强⼤的图形概念。Entity最终会转为primitive来进行渲染。Entity是一个封装了primitive的高级抽象。在某些情况下,可以在程序中混合使用,已实现最佳性能和易用性。
何时选择 Primitive 或 Entity
使用 Entity:
1、当需要快速开发原型或简单的应用程序时
2、当应用不需要极端的性能优化时
3、当团队成员不熟悉底层图形编程时
4、如果需要描述具有复杂属性和⾏为的实际对象
5、如果应用需要动态更新模型的位置、旋转或颜色,那么使用Entity 就更加方便,因为我们可以直接修改Entity 的属性,而不需要直接操作Primitive
使用 Primitive:
1、当需要极致的性能优化时
2、当项目涉及复杂的图形效果或自定义渲染逻辑时
3、当团队中有经验丰富的图形程序员时
4、如果只需要绘制简单的几何体,那么我们可以使⽤Primitive来获得更好的性能和控制
5、当需要在一个应用中渲染大量静态模型,而这些模型不需要任何动态属性更新(比如位置、旋转)。在这种情况下,使用Primitive 将更为合适,因为它避免了Entity 中不必要的数据更新开销,从而提高了加载效率