GLB 格式加载解析说明

glb 是什么?

glb 是gltf 资源格式的二进制格式,一般情况它将所有依赖的资源打包在一起形成一个 xxx.glb 的资源文件,但是如果有需要的话也可以依赖外部的文件。

glb 的结构

  • 一个12 byte 的头部
  • 一个或多个数据块,分别可能是 JSON数据 、二进制数据。

主意:数据块里面的JSON ,它可能引用外部的资源,或者其他数据块里面储存的数据资源。

glb 的二进制布局

glb 是 小端(little endian)模式


image.png
头部数据

头部 由 3个4字节的uint32 类型的条目组成,分别是:
*uint32 magic    一个固定等于 0x46546C67 的常量,它是glb的身份标记,对应为 ASCII 字符串为 "glTF" .
*uint32 version    表示glb格式的版本。
*uint32 length    包括 头、数据块所有数据的byte总长度。

块数据

每个块数据由如下结构组成

  • uint32 chunkLength    是 chunkData 的数据长度。
  • uint32 chunkType    指示数据块的类型。
  • ubyte[] chunkData    块二进制数据。

每个块的开始和结束必须与一个 4byte 的边界对齐。

Chunk Type ASCII Description 出现次数
0x4E4F534A JSON gltf 格式的 JSON 内容 1
0x004E4942 BIN 二进制缓存 0 或 1

客户端实现必须忽略具有未知类型的块,拓展可能引入其他的块类型。

JSON 内容块

提示:在javascript中可以使用 TextDecoder API 来将ArrayBuffer解析成字符串

这个块必须是二进制glTF资产的第一个块。通过首先读取这个块,实现能够逐步从后续的块中检索资源。通过这种方式,也可以从二进制glTF资产中只读取选定的资源子集。

这个块必须在尾部用 空格符(0x20)填充,以满足对齐要求。

二进制缓存

此块包含几何图形、动画关键帧、骨骼蒙皮 、图像的二进制数据。

这个块必须是二进制glTF资产的第二个块。

这个块必须在尾部用(0x00)填充,以满足对齐要求。

当二进制缓冲区为空或通过其他方式存储时,应该省略此块。

你可能感兴趣的:(GLB 格式加载解析说明)