Skip to content

模型、3D Tiles 与多尺度场景 ​

一架飞机模型与一座城市的三维数据都包含三角形,但加载策略不同。glTF 适合描述可传输的三维资产及其材质、动画;3D Tiles 进一步组织大范围三维内容的空间层级,让引擎按视图请求必要的部分。把城市所有顶点一次载入,并不是做出城市漫游的唯一办法。

模型位置与姿态的数学基础是矩阵和参考系。阅读时先确认哪个量是位置、哪个是方向、哪个是无量纲缩放。

单体模型先解决放在哪里 ​

模型有自己的局部坐标、原点与朝向;地球使用世界坐标。模型矩阵(model matrix)modelMatrix 将模型局部坐标变成世界坐标,包含朝向、位置及可能的缩放。本站提供十二栋完全程序生成的方块建筑,放在香港附近作坐标练习,位置与高度均不代表实景。下面两条加载路径二选一,避免重复显示同一组建筑。

以下是接在第二课初始化之后的功能片段,沿用已经导入的 Cesium 命名空间和已创建的 viewer,省略容器与初始化代码。其中的 await 需要放在 async 函数内,或支持顶层 await 的 ES 模块中。

js
const origin = Cesium.Cartesian3.fromDegrees(114.17, 22.30, 0);
const model = await Cesium.Model.fromGltfAsync({
  url: '/data/city/city.gltf',
  modelMatrix: Cesium.Transforms.eastNorthUpToFixedFrame(origin),
  scale: 1,
});
viewer.scene.primitives.add(model);

如果模型在世界中横躺,先检查资产坐标约定与姿态变换,不要靠交换经纬度纠正。缩放因子(scale factor)scale 是没有单位的显示比例,也不应被当成高度单位转换的替代。模型原点若位于几何中心,放到地表时可能有一半进入地下。

Tileset 解决什么时候需要多少细节 ​

3D Tiles 使用空间包围范围和几何误差组织细节。屏幕空间误差(screen-space error,SSE)以像素为尺度估计当前细节的几何误差;源瓦片的几何误差(geometric error)则是模型空间的长度量;阈值较小通常要求更细内容,也会增加请求、内存和绘制负担。它不是一个直接代表图像清晰度的百分比。

js
const tileset = await Cesium.Cesium3DTileset.fromUrl('/data/city/tileset.json', {
  maximumScreenSpaceError: 16,
});
viewer.scene.primitives.add(tileset);
await viewer.zoomTo(tileset);

这个微型 tileset 是一个无简化的叶瓦片,其根节点几何误差为零;适合学习加载和定位,不能用来展示多级 LOD 切换。包围盒(bounding box)是用于包住内容并帮助剔除的盒形范围,不是精确建筑轮廓。这个示例的盒子以东、北、天为轴;glTF 使用米制 Y-up,运行时先转换为 Z-up,再应用 ENU 到 ECEF 的变换。

可以查看 tileset 入口、glTF 内容 和 数据说明。几何二进制嵌入 glTF,本站自行托管,无需 token。生成脚本 scripts/generate-city.mjs 保留了尺寸、绕序与变换计算,资产按 CC0 提供。

与天气场组合时关注参考与遮挡 ​

建筑、地形和天气面需要一致的空间参考,但它们不必共享一种数据格式。高分辨率城市还会暴露全球视角下不明显的高度偏差。组合完成后,应检查局部斜视、地形交界与建筑后方的天气表达,并为超出数据覆盖的区域保留清楚的含义。

地球的数据层EXPERIMENT 04 · CESIUM 1.145.0

地球的数据层

分开控制影像、经纬网和地表高度。

在浏览器本地运行 · 无需账号 · 鼠标拖动旋转,滚轮缩放

底图:Natural Earth II(公共领域);其余几何和地形为教学合成。 数据说明
查看运行源码

此代码直接读取实际运行的实验模块。按 kind 分支定位当前实验,也可查看数据公式和 GLSL。

读取源码…

观察任务: 打开“显示合成建筑”,从斜上方观察楼顶与侧面,再关闭公开底图。建筑是否还存在?对于具有多级细节的真实 tileset,拉远后精细瓦片被粗糙版本替换,是否说明原始模型被修改?

展开解释

建筑仍然存在,模型内容与地表颜色来自不同数据链路。多级数据的细节选择改变当前加载与绘制的内容,源数据仍然存在。若需要测量或分析,应明确使用哪一级几何,而不能把任意显示层级当成同样精确的数据。

官方延伸:Model 加载与姿态、Cesium3DTileset 细节管理。

气象学 · 数学基础 · 地理可视化