Cesium中的Primitive


区别

  1. 功能不同:Entity对象主要用于描述地球上的实际物体,如车辆、建筑物、飞机等,它包含的属性可以控制该物体的位置、朝向、尺寸、颜色等。而Primitive对象主要用于绘制地球上的图形,如线、面、点等,它可以通过设置顶点和属性来控制图形的形状和样式。

  2. 属性不同:Entity对象包含一系列可控制物体的属性,如位置(position)、朝向(orientation)、名称(name)、描述(description)、几何形状(geometry)、材质(material)等。而Primitive对象包含的属性则根据不同类型的图形而异,如几何形状(geometry)、材质(material)、深度测试(depthTest)、线条宽度(lineWidth)、面的反向渲染(backfaceCulling)等。

  3. 更新方式不同:Entity对象的更新通常是通过修改属性值来实现的,例如更改位置(position)、名称(name)、朝向(orientation)等属性。而Primitive对象的更新通常需要重新生成并渲染整个图形,例如添加或删除顶点、更改材质(material)、更改几何形状(geometry)等属性。

  4. 动态性质不同:Entity对象通常更适合处理需要动态更新的物体,如飞机、车辆等,因为可以在实时更新它们的属性值。而Primitive对象通常更适合处理静态图形,如建筑物、河流等,因为它们不需要频繁更新。

Primitive

属性类型默认值描述
appearanceAppearanceundefined这个图元的外观,通常是由内置的Appearance子类之一创建的。
geometryInstancesArrayundefined要呈现的几何体实例数组。
showBooleantrue指定图元是否应该显示。
modelMatrixMatrix4Matrix4.IDENTITY一个用于转换模型坐标的4x4矩阵。
idObjectundefined每个primitive可以关联一个自定义的id属性。
allowPickingBooleantrue指定是否启用拾取。
asynchronousBooleantrue指定几何体是否应该异步加载。
compressVerticesBooleantrue指定是否要压缩顶点数据。
releaseGeometryInstancesBooleantrue指定在卸载此primitive的实例时是否应该释放其几何实例。
var viewer = new Cesium.Viewer('cesiumContainer');

var primitive = new Cesium.Primitive({
  geometryInstances: new Cesium.GeometryInstance({
    geometry: new Cesium.SphereGeometry({
      radius: 100000.0
    }),
    modelMatrix: Cesium.Matrix4.IDENTITY,
    attributes: {
      color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.BLUE)
    }
  }),
  appearance: new Cesium.PerInstanceColorAppearance()
});

viewer.scene.primitives.add(primitive);
// 添加3D建筑
const osmBuildings = viewer.scene.primitives.add(
  new Cesium.createOsmBuildings()
);


GeometryInstance

OptionTypeDefault ValueDescription
geometryGeometry几何体实例
modelMatrixMatrix4Matrix4.IDENTITY模型矩阵,用于定义几何体的位置、旋转和缩放等变换
idAnyundefined实例ID,便于在需要时对其进行引用
attributesObject{}定义几何体顶点属性的属性集合,如顶点颜色、法向量等。
boundingSphereBoundingSphereundefined几何体的包围球
showBooleantrue指定几何体实例是否应该显示
pickBooleantrue指定几何体实例是否应该支持选择
shadowsShadowModeShadowMode.DISABLED控制几何体实例的阴影模式,可设置为启用/禁用阴影/只接收阴影
vertexCacheOptimizeBooleantrue指定是否应优化几何体的渲染,以便在相邻帧之间缓存几何体的渲染数据以提高性能
interleaveBooleanfalse指定几何体实例中是否应该将所有属性打包到单个缓冲区中
compressVerticesBooleantrue指定是否应压缩几何体实例的顶点,以减少GPU内存使用量
instanceIdNumberundefined实例ID,可用于在渲染时区分不同的实例
attributesEnabledBooleantrue指定几何体实例中是否应启用属性
geometryInstancesArray<GeometryInstance>undefined定义由多个几何体实例组成的几何体。
let rectGeometry = new Cesium.RectangleGeometry({
  rectangle: Cesium.Rectangle.fromDegrees(
    // 西边的经度
    115,
    // 南边维度
    20,
    // 东边经度
    135,
    // 北边维度
    30
  ),
  // 距离表面高度
  height: 0,
  vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,
});

let instance = new Cesium.GeometryInstance({
  id: "blueRect",
  geometry: rectGeometry,
  attributes: {
    color: Cesium.ColorGeometryInstanceAttribute.fromColor(
      Cesium.Color.RED.withAlpha(0.5)
    ),
  },
});


Geometry

  1. 矩形(RectangleGeometry)

矩形可以用于创建一个经纬度范围内的平面矩形。它可以通过指定中心点、宽度和高度以及旋转角度来创建。

var rectangle = Cesium.Rectangle.fromDegrees(-100.0, 20.0, -90.0, 30.0);
var rectangleInstance = new Cesium.GeometryInstance({
    geometry : new Cesium.RectangleGeometry({
        rectangle : rectangle,
        vertexFormat : Cesium.VertexFormat.POSITION_AND_NORMAL
    })
});
  1. 盒子(BoxGeometry)

盒子是一个由六个面组成的长方体,可以用于创建建筑物等模型。

var boxInstance = new Cesium.GeometryInstance({
    geometry : new Cesium.BoxGeometry({
        vertexFormat : Cesium.VertexFormat.POSITION_ONLY
    })
});
  1. 圆柱体(CylinderGeometry)

圆柱体是一个有底面和顶面的圆柱体。

var cylinderInstance = new Cesium.GeometryInstance({
    geometry : new Cesium.CylinderGeometry({
        length : 100000.0,
        topRadius : 200000.0,
        bottomRadius : 200000.0,
        vertexFormat : Cesium.VertexFormat.POSITION_ONLY
    })
});
  1. 椭球体(EllipsoidGeometry)

椭球体是一个由中心点、半径和高度模型组成的三维椭球体。

var ellipsoidInstance = new Cesium.GeometryInstance({
    geometry : new Cesium.EllipsoidGeometry({
        radii : new Cesium.Cartesian3(100000.0, 200000.0, 300000.0),
        vertexFormat : Cesium.VertexFormat.POSITION_ONLY
    })
});
  1. 平面(PlaneGeometry)

平面是一个无限平面,可以用于创建墙壁等模型。

var planeInstance = new Cesium.GeometryInstance({
    geometry : new Cesium.PlaneGeometry({
        vertexFormat : Cesium.VertexFormat.POSITION_ONLY
    })
});
  1. 多边形(PolygonGeometry)

多边形可以用于创建一个由多个点组成的平面多边形。

var polygonInstance = new Cesium.GeometryInstance({
    geometry : new Cesium.PolygonGeometry({
        polygonHierarchy : new Cesium.PolygonHierarchy(
            Cesium.Cartesian3.fromDegreesArray([
                -72.0, 40.0,
                -70.0, 35.0,
                -75.0, 30.0,
                -80.0, 33.0,
                -78.0, 38.0
            ])
        ),
        vertexFormat : Cesium.VertexFormat.POSITION_ONLY
    })
});
  1. 球体(SphereGeometry)

球体是一个由中心点和半径组成的三维球体。

var sphereInstance = new Cesium.GeometryInstance({
    geometry : new Cesium.SphereGeometry({
        radius : 100000.0,
        vertexFormat : Cesium.VertexFormat.POSITION_ONLY
    })
});
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.13.0