GLB文件格式解析


简介

GLB是以GL传输格式(gltf)保存3D模型的一种二进制文件格式。

  • GLTF文件结构图

    参考文档:https://www.khronos.org/registry/glTF/specs/2.0/glTF-2.0.pdf

    参考手册: https://www.khronos.org/files/gltf20-reference-guide.pdf

  • GLB文件结构

    包含头文件块和数据块两部分,其中头文件以uint32存储专用符magic,版本号version以及文件长度length信息。

    数据块又分为JSONBIN两部分,JSON主要存储一些数据说明,包含scenesnodesmeshsaccessorsbufferViewbuffer等信息说明,BIN以base64编码存储数据。

    • 数据存储方式

    • 数据存储内容
      参考:https://docs.fileformat.com/3d/glb/

关键数据

解析GLB文件,可以先获取JSON块,然后再依据说明依次解析里面的数据

  • meshs

    • primitives

      表明mesh包含的数据内容,每个值以索引的方式指向buffer view

      • attributes

        POSITION: accessors_ID (表示顶点坐标值)

        NORMAL: accessors_ID (表示顶点归一化后坐标值)

      • indices: accessors_ID (表示索引)

    • accessors

      访问器,可以理解成访问数据的一个接口,以数组形式存储,每个item内容如下:

      • bufferView: buffer_view_ID
      • componentType: 数据类型(如:unsigned short / float ...)
      • count: 数据个数
      • type: 数据存储类型 (如:``SCALAR标量 /VEC3` 3D向量 ...)
    • bufferView

      说明每个数据流的信息

      • buffer: buffer_ID
      • byteOffset: 数据起始位置
      • byteLength: 数据长度
    • buffer

      base64编码的数据

      • byteLength: 数据长度

GLB数据

在Windows下搜索3D查看器,点击文件 ==> 3D资源库 ==> 选择模型 ==> 文件另存为即可得到glb模型文件

参考连接

https://zhuanlan.zhihu.com/p/65265611

https://blog.csdn.net/hankern/article/details/101796600

https://blog.csdn.net/qq_33656619/article/details/122056159 (四字节对齐,所以写了这部分代码)