返回

扩展构建二维或三维的工具清单

前端

深入探索 Cesium 的图形构建:从基础到精通

踏上图形构建之旅

准备踏上一个令人兴奋的旅程,我们将揭开 Cesium 图形构建世界的面纱。从基本形状到复杂模型,我们将一步步引导您掌握构建逼真图形所需的关键概念和技术。

Entity API 与 Primitive API:构建图形的基石

Cesium 提供了两种构建图形的强大 API:Entity API 和 Primitive API。Entity API 采用数据驱动的方式,让您轻松创建图形,并将数据对象定位在空间和时间中。Primitive API 则是一个更低级的 API,提供了细致入微的控制,让您使用图形术语构建形状和立体。

探索形状和立体的多样性

Cesium 支持广泛的形状和立体,从点、线和面到模型和图标。了解它们的不同特性和用途,为您的图形赋予丰富的多样性。点表示位置,线连接点,面呈现平面或曲面,模型描绘实体对象,而图标抽象化概念。

材质和纹理:赋予图形生命力

材质决定了图形的外观,定义颜色、透明度和粗糙度等属性。纹理添加细节和逼真度,让图形更加生动。Cesium 支持基本颜色材质、纹理材质、法线贴图和环境贴图等众多材质和纹理类型。

创建复杂模型:释放您的创造力

掌握了基本构建块,您便可以着手创建更复杂的模型。将形状和立体组合成一个对象,或使用 Primitive API 创造独特的形状和立体。材质和纹理的巧妙运用,将赋予您的图形以无与伦比的真实感。

部署图形:分享您的杰作

一旦您创建了引人入胜的图形,就可以将其部署到 Cesium Globe 或 Cesium Viewer 中。Cesium Globe 是一个在线 3D 地球,让您与他人共享和交互您的图形。Cesium Viewer 是一个桌面应用程序,允许您在本地查看和编辑图形。

常见问题解答

1. 如何使用 Entity API 创建一个简单的立方体?

// 定义立方体数据
const cubeData = {
  name: '立方体',
  position: Cartesian3.fromDegrees(-105.0, 40.0),
  box: {
    dimensions: new Cartesian3(200000.0, 200000.0, 200000.0)
  }
};

// 创建一个 Entity,将立方体数据与立方体几何体相关联
const cubeEntity = viewer.entities.add(cubeData);

2. 如何使用 Primitive API 渲染一条线?

const polyline = viewer.scene.primitives.add(new Cesium.PolylineGraphics({
  positions: [
    Cartesian3.fromDegrees(-100.0, 40.0),
    Cartesian3.fromDegrees(-101.0, 41.0)
  ],
  width: 5.0,
  material: Cesium.Color.ORANGE
}));

3. 如何为一个面添加纹理?

const material = viewer.scene.materials.add(new Cesium.Material({
  fabric: {
    type: 'Image',
    source: './earth.jpg'
  }
}));

const polygon = viewer.scene.primitives.add(new Cesium.PolygonGraphics({
  positions: [
    Cartesian3.fromDegrees(-100.0, 40.0),
    Cartesian3.fromDegrees(-100.0, 41.0),
    Cartesian3.fromDegrees(-101.0, 41.0),
    Cartesian3.fromDegrees(-101.0, 40.0)
  ],
  material: material
}));

4. 如何让模型随着时间移动?

// 定义模型数据
const modelData = {
  name: '飞机',
  position: Cartesian3.fromDegrees(-105.0, 40.0, 100000.0),
  model: {
    uri: './plane.glb'
  }
};

// 创建一个 Entity,将模型数据与模型几何体相关联
const modelEntity = viewer.entities.add(modelData);

// 更新模型位置
setInterval(() => {
  modelEntity.position = Cartesian3.fromDegrees(
    modelEntity.position.longitude + 0.01,
    modelEntity.position.latitude,
    modelEntity.position.height
  );
}, 100);

5. 如何从 Cesium Viewer 导出图形?

  • Cesium Globe: 使用屏幕截图或导出工具导出图像或视频。
  • Cesium Viewer: 使用 File > Export 导出模型、场景或 KML 文件。