一、3D Tiles来源和介绍
它是Cesium于2016年3月定义的一种三维模式瓦片数据结构,它将海量的三维数据用分块、分层的形式组织起来,很大程度上减轻了浏览器的负担,除此外还提供了细节层次的LOD(Levels of Detail 多细节层次)功能,在远观时,降低模型的面数和精度,拉近后再将细节加载出来,大大增强了页面的加载速度,更可以用于跨桌面使用,使得web端和移动应用程序共享,主要适用于静态场景
二、3D Tiles数据特点
-
开放性
它是一个开放式的数据规范,我们可以根据实际需求设定三维模型的大小和范围,此外还能适配多种空间分区方案,如:普通网格、四叉树、八叉树等四叉树:它是一种树形数据结构,它的每个节点下之多可以有四个子节点。通常把二维空间细分为四个区域,并把该区域里的相关信息存入到四叉树节点中,四叉树的每一个节点代表一个矩形区域,每一个矩形区域又可分为四个小矩形区域
八叉树:相比四叉树,八叉树是将二维空间延伸到了三维空间,树种的子节点只会有八个或者零个,每一个节点同样用于存储数据
-
异质性
支持将不同类型的三维模型数据,如普通模型数据加倾斜摄影数据加自绘几何数据放在一起,转化为统一标准的数据集,让它们可以在同一场景下显示出来 -
专为三维可视化设计
专为三维可视化设计,并在其中引入了图形领域的技术,在不满足特定条件的情况下,并不会对场景内的模型做整个渲染,而是只会渲染个轮廓,大大降低了计算量,使得浏览器请求到数据后,渲染的流程也更加的简单。同时,因为三维模型预先处理成了分块的三维瓦片格式,所以也减少了WebGL绘制请求的数量。 -
可交互性
其支持对加载模型的拾取,和样式的修改,大量加载以后,可以对其中的单独模型进行交互,如:高亮显示鼠标悬停处的模型、或进行删除等,也可根据建筑模型的高度和年代,设置不同的显示效果而不需要重新更新代码
三、3D Tiles格式文件代码详解
3D Tiles的格式是由两个部分组成的:
其一是如下的json格式的数据,这里的asset是一个包含整体tileset元素属性的对象,其中的version属性是定义3D Tiles版本的字符串,此外这里还可以选填一个tilesetVersion属性,它可以用于定义特定应用中的版本号,geometricError属性定义了一个非误差单位,低于这个误差值,瓦片集不会被渲染(单位:米),root属性用于定于根瓦片。它的子项transform也是一个可选项,它的作用是在加载大量模型或者建筑物的情况下,单个模型的点云瓦片集能在它自己的坐标系中定义,其内的数据是一个4*4的仿射变换矩阵,以列主序存储,用来实现从瓦片局部坐标系到父瓦片或根瓦片坐标系的变换。root内部也有一个geometricError属性,前者是整个瓦片不被渲染的误差,后者只是当前瓦片集被渲染的误差。content属性通过url引入文件,其支持的二进制文件格式有.b3dm、.i3dm、.pnts等,甚至可以在其中再放入一个3D Tiles文件,前提是不可以自己引用自己。content上方的refine属性定义的是LOD细化的方法,简单来说就是瓦片是如何切换的。
构成3D Tiles的第二部分就是其引用的瓦片数据文件了,.b3dm就是我们用于渲染数据的文件文章来源:https://www.toymoban.com/news/detail-401059.html
//json文件
{
"asset": {
"version": "1.0"
},
"geometricError": 70,
"root": {
"boundingVolume": {
"box": [
0,
0,
10,
100,
0,
0,
0,
100,
0,
0,
0,
10
]
},
"transform": [
0.9686356343768792,
0.24848542777253735,
0,
0,
-0.15986460744966327,
0.623177611820219,
0.765567091384559,
0,
0.19023226619126932,
-0.7415555652213445,
0.6433560667227647,
0,
1215011.9317263428,
-4736309.3434217675,
4081602.0044800863,
1
],
"geometricError": 70,
"refine": "ADD",
"content": {
"uri": "buildings.b3dm"
},
"children": [
{
"boundingVolume": {
"box": [
0,
0,
0,
100,
0,
0,
0,
100,
0,
0,
0,
15
]
},
"transform": [
0.35355339059327373,
0.3535533905932738,
0,
0,
-0.3535533905932738,
0.35355339059327373,
0,
0,
0,
0,
0.5,
0,
0,
0,
5,
1
],
"geometricError": 0,
"content": {
"uri": "instances.i3dm"
}
}
]
}
}
四、3D Tiles数据使用方法
b3dm格式瓦片集主要用于加载批量的模型,pnts格式瓦片集用于加载点云数据模型,cmpt瓦片集,允许一个cmpt文件内嵌多个其他类型的瓦片。文章来源地址https://www.toymoban.com/news/detail-401059.html
// 3DTiles并不是Entity的一部分,而是属于更加底层的primitives
var tileset = viewer.scene.primitives.add(
// 用于实例化
new Cesium.Cesium3DTileset({
// 放入json文件的路径
url:"../../lib/TilesetWithViewerRequestVolume/tileset.json",
maximumScreenSpaceError: 2, //最大的屏幕空间误差,数字越低,视觉效果越好
maximumNumberOfLoadedTiles: 1000, // 最大加载瓦片个数用于给定一定的限制,防止数据量过大,占用内存过高
})
)
到了这里,关于三维数据格式3DTiles的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!