美文网首页
GLB 格式加载解析说明

GLB 格式加载解析说明

作者: ansey | 来源:发表于2022-09-12 16:39 被阅读0次

    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 格式加载解析说明

          本文链接:https://www.haomeiwen.com/subject/mvlhortx.html