
上图是一份 3dTiles数据集在文件夹内的样子,层层打开可得以下特点:
- 入口文件是
 - 各级瓦片用文件夹(目录)来组织
 
3dTiles 数据目前的具体文件实现,是一些零散的文件。
数据集的名称与所在文件夹的名称并无关系,数据集的名称写在入口文件中。
3dTiles至少有一个 文件,作为整个数据集的入口。它是一个 json 文件,描述了整个三维瓦片数据集,它记录的是上一节提及的“逻辑信息”,还包括一些其他的元数据。而“属性信息”、“嵌入的gltf模型” 则位于各个二进制瓦片文件中,这些二进制文件则由 中的瓦片中的 来引用。
瓦片,屋顶上的瓦片。古时候,盖房子,屋顶不能一次浇筑完工,也没有特定的“屋顶”零件,所以只好一片片瓦片盖上去(我瞎掰的)。

瓦片切割了三维数据,允许三维数据进行细分。我们都知道网速是有限的,在加载超大规模的三维模型数据时,不可能把一个模型全部下载下来再渲染,那样等待的时间太慢了,但是一点一点出现,视野范围外的“瓦片”则干脆就不下载、渲染,性能、视觉都有提高。这就是瓦片的设计优点。
传统的二维地图瓦片,叫做 WMTS 或 TMS,这个 "T" 就是 的意思。
现在,你只要知道,3dTiles就是把空间进行切块,每个块叫做 “tile”,也即瓦片。至于怎么切的——待会介绍 tileset.json 时,会隆重介绍树结构。

瓦片只有两种情况:叶子瓦片,非叶子瓦片。根瓦片也是非叶子瓦片。非叶子瓦片和叶子瓦片有什么区别呢?主要就是叶子瓦片不会再有孩子了(树结构的知识哈,不懂的建议去学习数据结构中的树)。
瓦片包含什么内容呢?本篇稍微靠后再仔细了解瓦片。
现在,我们先认识一下,描述整个 3dTiles 数据集的入口文件,也叫做三维瓦片数据集 —— tileset.json:
通常,一个三维瓦片数据集(之后简称:一个3dtiles数据)的入口就是那个”tileset.json“,至于这个文件的名称可不可以改,暂时未作测试。
现在,我们先来研究研究 这个入口文件记录了哪些信息,拿一份最简单的 3dtiles数据来举例,该数据只有一个根瓦片(root),根瓦片再无子瓦片。

root对象中有一个content,内有uri属性,其就记录了根瓦片的二进制数据文件的URL,这个URL是个相对路径,相对于 tileset.json 文件。
通过上面介绍,3dTiles数据的入口文件是一个名叫 的文件,而通常来说,这个json必须存在以下几个顶级对象:
- asset
 - root
 - geometricError
 
由于本人学识有限,目前不太清楚 的精确含义,只知道这个数值的大小能控制 LOD 的显示隐藏,且这个数值父级瓦片一定比子级瓦片大。
对象,记录了整个数据集的声明和归属数据,类似于数据声明,能在此写入 、 等属性,当然也可以像上方的例子一样,写入生成工具、gltf朝向等信息。
对象,即这个数据集的根瓦片,每个3dTiles数据集必须有一个 对象。
至于 中其他的顶级对象,请查阅官方文档:点我
树结构对于三维空间数据的组织有很大的优势。3dTiles在空间上允许数据集使用如下几种树结构:
- 四叉树
 - 八叉树
 - KD树
 - 格网结构
 
四叉树允许使用传统的均匀四叉树,也允许使用松散四叉树等变种(例如,允许子节点,即子瓦片允许存在空间范围重叠)。

上图为两个子瓦片在空间上存在部分重叠,照顾到了建筑物不可能严格切分的特点。
四叉树对在高度上不太好切分的数据比较适合,而如果追求极致的空间分割和分级(例如点云数据),那么八叉树更合适。

八叉树也允许使用各种变种。
kd树比较难理解,在此不作展开,这也是一种有趣的空间结构分割的数据结构。
格网结构的树允许瓦片存在多个子瓦片:
到此这篇3d tiles(3dtile数据)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/sjkxydsj/15565.html