3dTiles 数据规范详解[4.1] b3dm瓦片二进制数据文件结构 (2)

通过 FeatureTableJSON 可以获取 BATCH_LENGTH 为10,那么就有10个模型,对应的,这 40 个字节就存储了10个 height 值,查相关资料得知,FLOAT类型的数据字节长度为 4,刚好 4 byte × 10 = 40 byte,即 height 属性的全部数据的总长。

geographic 属性也同理,VEC3 代表一个 geographic 有3个 DOUBLE 类型的数字,一个 DOUBLE 数值占 8byte,那么 geographic 一共数据总长是:

type × componentType × BATCH_LENGTH = 3 × 8byte × 10 = 240 byte.

3dTiles 数据规范详解[4.1] b3dm瓦片二进制数据文件结构

事实上,两个属性的总长是 40 + 240 = 280 byte,与 b3dm 文件头中的第七个属性 batchTableBinaryByteLength = 280 是一致的。

二进制本体数据

二进制本体数据即批量表中每个属性的顺次存储。

能不能不写二进制本体数据?

可以。如果你觉得数据量比较小,可以直接把数据写在 BatchTableJSON 中,还是以上述两个数据为例:

{ "height": [10.0, 20.0, 15.0, ...], // 太长了不写那么多,一共10个 "geographic": [ [113.42, 23.10, 102.1], [111.08, 22.98, 24.94], // 太长不写 ] }

但是,读者请一定注意这一点:同样是一个数字,二进制的JSON文本大多数时候体积会比二进制数据大。因为JSON文本还包括括号、逗号、冒号等JSON文本必须的符号。对于属性数据相当大的情况,建议使用 JSON引用二进制本体数据的组织形式,此时JSON充当的角色是元数据。

注意:对于属性的值类型是 JSON 中的 object、string、bool 类型,则必须存于 JSON 中,因为二进制体只能存 标量、234维向量四种类型的数字数据。

④ 内嵌的glb

本部分略,对glb数据感兴趣的读者可自行查阅 glTF 数据规范。

关于两大数据表如何与glb每一个顶点进行关联的,在前篇也有简略介绍。可以参考官方的说明:

⑤ 字节对齐与编码端序 JSON二进制文本对齐

FeatureTableJSON、BatchTableJSON的二进制文本,最后一个字节相对于整个b3dm文件来说,偏移量必须是8的倍数。

如果不对齐,必须用二进制空格(即 0x20)填够。

你问我为啥不对起始偏移量也要求 8byte 对齐?因为 FeatureTableJSON 之前是28byte的 文件头,为了凑齐8倍数对齐,文件头和 FeatureTableJSON 还要塞4个字节填满,那就有点多余了。

末尾对齐,即 (28 + ftJSON长)能整除8,(28 + ftTable长 + btJSON长)能整除8.

数据体的起始、末尾对齐

二进制数据体,无论是要素表、批量表,首个字节相对于b3dm文件的字节偏移量,必须是8的倍数,结束字节的字节偏移量,也必须是8的倍数。

如果不满足,可以填充任意数据字节满足此要求。

特别的,二进制数据体中,每一个属性值的第一个数值的第一个字节的偏移量,相对于整个b3dm文件,必须是其 componentType 的倍数,如果不满足,则必须用空白字节填满。

例如,上述 height 属性所在的批量表二进制数据体,理所当然位于批量表JSON之后,而批量表的JSON又是8byte对齐的,假设批量表的数据体起始字节是800,那么 height 的第一个值起始字节就是 800,由于 height 属性的 componentType 是 FLOAT,即 4字节,800 ÷ 4 能整除,所以没有问题。

但是,假如 换一个属性,其 componentType 是 BYTE,即 1字节,那么假设第二个属性的 componentType 是 DOUBLE,即 8字节,就会出现 第二个属性的第一个值起始偏移量是810,810 ÷ 8 并不能整除,必须补齐 6个空白字节,以满足第二个属性第一个值的起始偏移量是 810+6 = 816字节。

编码端序

要素表、批量表的二进制数据,无论是JSON还是数据体,均使用小端序编码(LittleEndian)。

⑥ 扩展数据(extensions)与额外补充信息(extras)

其实,无论是要素表,还是批量表,都允许在JSON中存在扩展数据,以扩充当前瓦片模型的功能,而并不是单一的一个一个模型顺次存储在瓦片文件、glb中。

有关扩展数据,在以后会专门出一篇博客介绍。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfgxj.html