经纬志
首页 / Cesium / API 文档

Primitive

先看结论

几何体与外观的组合,一次提交给 GPU 绘制。相比 Entity 少了一层属性系统和逐帧求值, 要素上万时是更合适的选择。

最后验证 2026-11-03 · CesiumJS 1.121 · 更新 2026-10-28 · 引用本文
new Cesium.Primitive({ geometryInstances, appearance, asynchronous, allowPicking, compressVertices, interleave, releaseGeometryInstances })

构造参数

参数类型默认说明
geometryInstancesGeometryInstance | Array必填一个或多个几何实例,共用同一外观
appearanceAppearance—着色方式,如 PerInstanceColorAppearance、MaterialAppearance
asynchronousbooleantrue在 Web Worker 里创建几何,避免阻塞主线程
allowPickingbooleantrue是否允许 scene.pick 命中
compressVerticesbooleantrue压缩顶点属性,降低显存占用
interleavebooleanfalse顶点属性交叉存放,GPU 读取更连续
vertexCacheOptimizebooleanfalse重排顶点顺序提升缓存命中率
releaseGeometryInstancesbooleantrue上传完成后释放 CPU 端几何数据

常用成员

成员类型说明
showboolean显示开关,默认 true
modelMatrixMatrix4整体变换矩阵,改它可以移动、旋转整个图元
readyboolean几何是否已上传到 GPU
readyPromisePromise就绪后 resolve 自身,异步场景下用得上
geometryInstancesGeometryInstance | Array构造时传入的实例;释放后可能为 undefined
appearanceAppearance外观对象,可运行时修改材质
allowPickingboolean关闭后拾取不到,可省一块颜色缓冲
debugShowBoundingVolumeboolean画出包围球,排查裁剪错误时用

常用方法

方法返回说明
getGeometryInstanceAttributes(id)object取出某个实例可写的属性,如 color
destroy()—释放顶点缓冲;从集合移除后再调用
isDestroyed()boolean是否已销毁

示例

// 两个盒子,颜色写进实例属性,共用一份顶点数据
var instances = [0, 1].map(function (i) {
  return new Cesium.GeometryInstance({
    geometry: new Cesium.BoxGeometry({
      vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,
      maximum: new Cesium.Cartesian3(100, 100, 100)
    }),
    modelMatrix: Cesium.Transforms.eastNorthUpToFixedFrame(
      Cesium.Cartesian3.fromDegrees(116.391 + i * 0.002, 39.907, 50)
    ),
    attributes: {
      color: Cesium.ColorGeometryInstanceAttribute.fromColor(
        Cesium.Color.fromCssColorString(i ? '#e8b04b' : '#4aa3ff')
      )
    },
    id: 'box-' + i
  });
});

var primitive = viewer.scene.primitives.add(new Cesium.Primitive({
  geometryInstances: instances,
  appearance: new Cesium.PerInstanceColorAppearance({
    flat: true,
    translucent: false
  }),
  asynchronous: true
}));

// 就绪后可以单独改某个实例的颜色
primitive.readyPromise.then(function () {
  var attr = primitive.getGeometryInstanceAttributes('box-0');
  attr.color = Cesium.ColorGeometryInstanceAttribute.toValue(
    Cesium.Color.RED
  );
});

注意事项

  • 一个 Primitive 共用一种 Appearance;不同材质要拆成多个 Primitive。
  • releaseGeometryInstances 默认为 true,之后 geometryInstances 会变成 undefined,需要留数据就先自行保存。
  • 异步创建期间 ready 为 false,此时改 modelMatrix 仍有效,但不要依赖几何对象。
  • Primitive 不是 Entity,没有 position 属性,移动要改 modelMatrix。
引用本文

经纬志(2026)。《Primitive》。https://www.jingweizhi.com/cesium/api/primitive.html(访问日期 2026-11-03)。