深色模式
Entity 与 Primitive 的边界
Entity 让代码围绕“这是什么对象”组织:站点有位置、名称与属性,台风路径随时间变化。Primitive 更接近“这一批几何怎样绘制”:顶点、实例属性、外观与渲染状态直接参与表达。选择两者应从数据和更新方式出发,不能把较底层的 API 自动等同于更高性能。
高层对象会被转换
Entity 通过可视化组件转换到底层绘制对象,Cesium 可以对适合的几何做批处理。十个 Entity 不一定对应十次绘制,一个 Primitive 也不保证永远只有一次 GPU 命令。是否合批还与材质、透明度、几何类型及更新方式有关。
下面把一个经纬矩形直接作为 Primitive 加入场景。Rectangle 描述地理范围,RectangleGeometry 则描述怎样生成该范围内的几何;相似的名字不代表相同的数据层次。
以下是接在第二课初始化之后的功能片段,沿用已经导入的 Cesium 命名空间和已创建的 viewer,省略容器与初始化代码。
js
const instance = new Cesium.GeometryInstance({
geometry: new Cesium.RectangleGeometry({
rectangle: Cesium.Rectangle.fromDegrees(110, 20, 118, 27),
height: 10000, // 椭球高,米;没有贴地语义
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,
}),
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.TEAL),
},
});
viewer.scene.primitives.add(new Cesium.Primitive({
geometryInstances: instance,
appearance: new Cesium.PerInstanceColorAppearance({ translucent: false }),
}));这里几何描述形状,实例提供位置变换与实例属性,Appearance 规定如何消费这些属性。三者必须匹配:外观需要法线(normal,垂直于表面的方向),而几何没有提供时,仅靠改变颜色无法补齐缺失输入。
动态不等于每帧重建
少量业务对象和时间属性通常适合 Entity;大量同类静态几何可考虑批处理;需要每帧更新粒子状态或数据纹理时,才逐渐进入专门的 GPU 路径。先测量瓶颈:耗时可能来自属性计算、几何准备、上传或像素填充,优化错层就难以见效。
异步创建 Primitive 可以分摊部分几何准备,但它仍有生命周期。对象尚未准备好时不能假设所有实例属性都可直接操作;删除对象时也要按所属集合和资源所有权处理。
对象如何被画出
比较 Entity 与 Primitive,查看几何与材质的边界。
在浏览器本地运行 · 无需账号 · 鼠标拖动旋转,滚轮缩放
底图:Natural Earth II(公共领域);其余几何和地形为教学合成。 数据说明
查看运行源码
此代码直接读取实际运行的实验模块。按 kind 分支定位当前实验,也可查看数据公式和 GLSL。
读取源码…观察任务: 在“对象接口”中切换 Entity 与 Primitive,将“几何数量”保持为 16,比较表面外观与拾取结果。仅凭最终外观,能否判断它来自哪条路径?
展开解释
通常不能,两条路径可以产生相同画面。选择依据在数据模型、更新频率与所需控制,而不是视觉风格。应检查数据到绘制的实际链路,再用性能记录验证优化收益。
官方延伸:Primitive、1.145 Entity 可视化入口。