• 正文概述
  • 一、文件结构

      一个gltf模型一般包含一下几个文件:
      .bin   二进制文件存放顶点、法线、面、uv等数据
      .gltf  描述模型的综合信息
      img文件夹  存放模型贴图
    

    二、gltf模型信息详解

    1、数据结构:

      {
        scene:0,
        scenes:[{nodes:0}],
        nodes:[
          {
             name:"rootModel",
             children:[1]
          },
          {
             name:"floor1",
             children:[2]
          },
          {
             name:"room1",
             mesh:0
          }
        ],
        meshes:[
            {
              name:"mesh1",
              primitives:[
                  {attributes:{POSITION:0, NORMAL :1,TEXCOORD_0:0},indices:0, material:0,mode:4}
              ]
            }
        ],
        accessors:[
            {name:"postions_0", componentType:5126, count:100, bufferView:0, byteOffset:0,type:"VEC3",max:[],min:[]},
            {name:"texcoods_0", componentType:5126, count:100, bufferView:0, byteOffset:0,type:"VEC2",max:[],min:[]},
            {name:"indices_0", componentType:5123, count:100, bufferView:0, byteOffset:0,type:"SCALAR",max:[],min:[]}
        ],
        bufferViews:[
            {name:"view0",buffer:0,byteLength: 144, byteOffset: 0, byteStride: 12, target: 34962},
            {name:"view1",buffer:0,byteLength: 100, byteOffset: 144, byteStride: 8, target: 34962},
            {name:"view2",buffer:0,byteLength: 100, byteOffset: 244, byteStride: 8, target: 34962}
        ],
        buffers:[{name:1,uri:"1.bin"}],
        materials:[
            {name:"m0", pbrMetallicRoughness:{baseColorTexture:{index:0}}}
        ],
        textures:[{name:"t0",source:0}],
        images:[{name:"img0",uri:"1.jpg"]
        animations:[]
      }
    
    2、概述

    模型加载顺序为,先加载gltf文件,然后解析依次读取scenes、nodes、meshes、accessors、bufferViews、buffers、materials、textures、images。其中每个mesh包括一个bufferViews和一个materials。每一层的递进都有数组下标来确定。

    3、各字段详解
    scenes 场景

      scenes:[{nodes:0}],
      scene:0
    

    一般模型只有一个也是默认场景,如果是多个,则根据对应的scene字段确定哪一个是默认场景,参考数据结构部分的数据,每一个scene都包含一个nodes字段,指定了scene的根结点。本例中nodes对应的值为0,代表根节点为nodes字段下对应的第一个元素。

    nodes 节点

      nodes:[
      {
         name:"rootModel",
         children:[1]
      },
      {
         name:"floor1",
         children:[2]
      },
      {
         name:"room1",
         mesh:0
      }
    ]
    

    nodes用来组装模型层级,第一个节点是父节点,children字段指定它所包含的子节点。
    nodes节点分为俩种,一种是有children字段的,最终会渲染成group,一种是有mesh字段的最终渲染为mesh,mesh字段的值为meshes数组的小标。

    meshes 网络

      meshes:[
        {
          name:"mesh1",
          primitives:[
              {attributes:{POSITION:0, NORMAL :1,TEXCOORD_0:0},indices:0, material:0,mode:4}
          ]
        }
    ]
    

    网,由多个面和材质组成,通过primitives字段指定。

    • attributes 指定了顶点、顶点法线、uv坐标在accessors数组的对应数据的下标。
      POSITION – 顶点
      NORMAL – 顶点法线,顶点法线不是必须,导入引擎 时可生成
      TEXCOORD_0 – uv坐标
    • indices 指定了面在accessors数组的对应数据的下标
    • material 指定了该mesh的材质在materials数组中的下标
    accessors 访问器

      accessors:[
            {name:"postions_0", componentType:5126, count:100, bufferView:0, byteOffset:0,type:"VEC3",max:[],min:[]}
      ]
    

    访问器是链接bufferView和mesh之间的桥梁,主要作用是对bufferView中数据进行进一步描述

    • componentType 数据类型浮点或者整形
    • count 数量总和(顶点总数或者面总数,通过此字段可计算模型的总顶点数、总面数,对于模型性能分析和优化有很大作用
    • bufferView 对应数据在bufferViews中的下标
    bufferViews 缓冲区视图

       bufferViews:[ 
          {name:"view0",buffer:0,byteLength: 144, byteOffset: 0, byteStride: 12, target: 34962}
       ]
    
    • buffer 对应的数据在buffers数组中的下标
    • byteLength 该缓冲区对于的数据长度
    • byteOffset 在buffer中的起始位置
    buffers 缓冲区

      buffers:[{name:1,uri:"1.bin"}]
    
    • uri 该缓冲区对于的bin文件,bin文件的作用参考第一部分的介绍
    从mesh走到bin文件,模型的骨骼已经确定了,顶点、法线、面、都有了,剩下的就是给模型添加材质贴图,这一部分也是从mesh出发,由mesh下的material字段指定对应的材质
    materials 材质

      materials:[
            {name:"m0", pbrMetallicRoughness:{baseColorTexture:{index:0}}}
        ]
    
    • baseColorTexture 对应textures数组下标
    textures 纹理

      textures:[{name:"t0",source:0}],
    
    • source 对应images数组下标
    images 贴图

      images:[{name:"img0",uri:"1.jpg"]
    

    总的流程如下图

    作者:古星_8cb9
    链接:https://www.jianshu.com/p/905671909b25
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,请不要用于商业用途!
    3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
    8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
    声明如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性

    GLB下载网 - GLB/GLTF模型与格式资源免费下载,支持在线浏览与转换 » gltf/GLB格式模型详解

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载要提取码
    百度网盘提取码都是gltf。
    分享过期和重复下载怎么办
    分享过期请使用备份下载,重复下载是不另扣费的,请放心下载。
    模型和平台不兼容怎么办
    可以用网站在线编辑功能,修改模型属性,大小,方向,坐标,中心,透明等问题,然后重新导出既可https://glbxz.com/38636.html
    开通VIP 享更多特权,建议使用 QQ 登录