3DTiles格式介绍(4)——TileSet

本文详细介绍了3DTiles格式中的TileSet,包括asset、properties、geometricError和root四个属性,以及外部tileSet、包围体的连贯性和空间数据结构,如四叉树、K-d树、八叉树和格网划分方法。3DTiles通过递归树结构组织场景,提供了一种灵活的空间数据组织方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3DTiles格式介绍总目录:https://blog.youkuaiyun.com/qq_31709249/article/details/102643371

上一篇文章介绍了Tile,下面来接着介绍TileSet。3DTiles使用一个或多个tileset的json文件来组成整个场景,这些json文件不需要遵循特定的命名规则。老办法,我们还是来看tileset的json文件内容,一遍看一边说。

{
  "asset" : {
    "version": "1.0",
    "tilesetVersion": "e575c6f1-a45b-420a-b172-6449fa6e0a59",
  },
  "properties": {
    "Height": {
      "minimum": 1,
      "maximum": 241.6
    }
  },
  "geometricError": 494.50961650991815,
  "root": {
    "boundingVolume": {
      "region": [
        -0.0005682966577418737,
        0.8987233516605286,
        0.00011646582098558159,
        0.8990603398325034,
        0,
        241.6
      ]
    },
    "geometricError": 268.37878244706053,
    "refine": "ADD",
    "content": {
      "uri": "0/0/0.b3dm",
      "boundingVolume": {
        "region": [
          -0.0004001690908972599,
          0.8988700116775743,
          0.00010096729722787196,
          0.8989625664878067,
          0,
          241.6
        ]
      }
    },
    "children": [..]
  }
}

我们可以看到,tileSet有四个属性:asset、properties、geometricError、root。下面来逐个介绍每个属性:

1.asset

asset包含整个tileSet的元数据,asset.Version属性,定义了3DTiles的版本,此版本号指定tileSet的JSON模式和基本的tileSet格式。tileVersion属性可选,用于定义特定的应用程序的tileset。

2.properties

该属性中包含tileSet中的一些功能性属性。上面的例子是一个建筑物的3DTiles,因此每个瓦片都含有三维建筑物模型,每个三维建筑物模型都有Height属性,所以上面的例子中就定义了Height属性。properties中的属性,每个属性的作用通常如属性名称相对应(如例子中的Height对应高度),并且包含该属性的最大值和最小值。这对于创建随值

### 3D Tiles 技术实现园区模型可视化 #### Cesium 中的 3D Tiles 实现原理 Cesium 提供了一种高效的三维地理空间数据加载方式——3D Tiles。这种技术通过分层结构优化了大规模场景的数据传输和渲染效率[^3]。具体来说,3D Tiles 是一种基于瓦片金字塔结构的标准格式,能够动态调整细节级别(LOD, Level of Detail),从而适应不同设备性能需求。 以下是使用 Cesium 加载并展示 3D Tiles 数据的核心代码示例: ```javascript // 初始化 Cesium Viewer const viewer = new Cesium.Viewer('cesiumContainer'); // 添加 3D Tiles 数据源 viewer.scene.primitives.add( new Cesium.Cesium3DTileset({ url: 'path/to/your/tileset.json' // 替换为实际路径 }) ); ``` 上述代码展示了如何初始化一个 Cesium 场景,并加载指定 URL 的 3D Tiles 数据集[^1]。 --- #### Three.js 配合自定义解析器实现 3D Tiles 功能 Three.js 并未原生支持 3D Tiles 格式,因此需要开发者自行编写解析逻辑或将现有库集成到项目中。Vue-Cesium-Three-Template 提供了一个基础框架来结合 Vue3 和 Three.js 进行开发[^2]。如果希望扩展至 3D Tiles 支持,则可以参考以下思路: 1. **读取 Tileset JSON 文件**:提取元信息以及几何体描述。 2. **逐级加载瓦片资源**:根据视锥裁剪算法决定哪些瓦片应被优先下载。 3. **转换为 Three.js 对象**:将每一块瓦片中的顶点、法线等属性映射成对应的 Mesh 或 Geometry 结构。 下面是一段简单的伪代码用于说明此过程的一部分功能实现: ```typescript import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; function loadTile(tileUrl: string): Promise<THREE.Group> { const loader = new GLTFLoader(); return new Promise((resolve, reject) => { loader.load(tileUrl, (gltf) => resolve(gltf.scene), undefined, reject); }); } async function renderTiles(tilesArray: Array<string>) { const group = new THREE.Group(); for (let tilePath of tilesArray) { try { let loadedModel = await loadTile(tilePath); group.add(loadedModel); } catch(error){ console.error(`Failed to load ${tilePath}:`, error); } } scene.add(group); } ``` 以上片段演示了如何利用 `GLTFLoader` 来逐步导入多个子模型文件作为单个整体显示出来。 --- #### 组合应用案例分析 当尝试在一个综合平台上完成园区级别的复杂建模任务时,推荐采用混合架构设计模式。即前端部分依赖于轻量化的 Web 应用程序界面组件(如 VUE3 构架下的 UI 层面交互操作),而后端负责提供经过预处理后的高质量倾斜摄影测量成果或者 BIM 输出物给客户端调用。 最终效果可能包括但不限于建筑物外观材质贴图真实感增强;植被覆盖区域自动分类标注等功能特性展现形式。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MeteorChenBo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值