• 正文概述
  • 下面是一个最小巧的glTF格式文件的内容,它描述了一个简单的三角形。可以将下面的内容保存到一个gltf文件中,使用任意支持glTF格式文件的渲染程序来渲染它。本章节,我们会基于这个小巧的glTF格式文件内容对glTF格式进行基本的概念介绍。

    {
      "scenes" : [
        {
          "nodes" : [ 0 ]
        }
      ],
      
      "nodes" : [
        {
          "mesh" : 0
        }
      ],
      
      "meshes" : [
        {
          "primitives" : [ {
            "attributes" : {
              "POSITION" : 1
            },
            "indices" : 0
          } ]
        }
      ],
    
      "buffers" : [
        {
          "uri" : "data:application/octet-stream;base64,AAAA为了排版而省略,可以使用英文原文中的代码",
          "byteLength" : 44
        }
      ],
      "bufferViews" : [
        {
          "buffer" : 0,
          "byteOffset" : 0,
          "byteLength" : 6,
          "target" : 34963
        },
        {
          "buffer" : 0,
          "byteOffset" : 8,
          "byteLength" : 36,
          "target" : 34962
        }
      ],
      "accessors" : [
        {
          "bufferView" : 0,
          "byteOffset" : 0,
          "componentType" : 5123,
          "count" : 3,
          "type" : "SCALAR",
          "max" : [ 2 ],
          "min" : [ 0 ]
        },
        {
          "bufferView" : 1,
          "byteOffset" : 0,
          "componentType" : 5126,
          "count" : 3,
          "type" : "VEC3",
          "max" : [ 1.0, 1.0, 0.0 ],
          "min" : [ 0.0, 0.0, 0.0 ]
        }
      ],
      
      "asset" : {
        "version" : "2.0"
      }
    }
    图3a:一个简单的三角形

    scene和nodes结构

    glTF格式使用scene对象来描述场景。对glTF数据的JSON文件进行解析时,对场景结构的遍历也是从scene对象开始。每个scene对象引用了一个nodes数组,nodes数组通过索引引用了场景的根结点。

    示例中的代码只包含了一个scene对象,这一scene对象引用了一个索引为0的node对象,这个node对象引用了索引为0的mesh对象:

      "scenes" : [
        {
          "nodes" : [ 0 ]
        }
      ],
      
      "nodes" : [
        {
          "mesh" : 0
        }
      ],

    在之后的章节,我们会对scene对象和node对象进行更为详细地介绍。

    meshes

    mesh对象用于表示场景中出现的3D对象实际的几何数据。mesh对象本身不包含任何属性,只包含了一个primitives对象数组,用于描述整个网格所使用的几何数据。每个primitive对象描述了一部分mesh对象的几何数据。

    示例只包含了一个mesh对象,这一mesh对象只包含了一个primitive对象。primitive对象包含了一个attribute对象数组,存储了mesh对象的几何数据信息。对于这个示例来说,只包含了一个POSITION属性,用于描述mesh对象的顶点位置信息。primitive对象的indices属性描述了用于渲染的顶点索引数据,默认情况下,连续3个顶点索引构成一个三角形。

    mesh对象实际的几何数据由primitive对象的attributes对象数组和indices对象数组通过引用accessor对象给出:

      "meshes" : [
        {
          "primitives" : [ {
            "attributes" : {
              "POSITION" : 1
            },
            "indices" : 0
          } ]
        }
      ],

    在之后的章节,我们会对mesh对象进行更为详细地介绍。

    buffer,bufferView和accessor概念

    buffer,bufferView和accessor对象提供了对mesh对象实际的几何数据的描述。我们在这里对它们进行简要地介绍,更为详细的说明会在之后的章节进行。

    Buffers

    buffer对象描述了一个没有任何结构和层次意义的数据块。它包含了一个uri属性,用于引用外部文件作为数据,或是直接使用数据URI作为数据内容。

    对于示例,我们使用数据URI直接在JSON文件中编码长度为44字节的buffer数据:

      "buffers" : [
        {
          "uri" : "data:application/octet-stream;base64,AAAAAAAAA为了排版而省略,可以使用英文原文中代码",
          "byteLength" : 44
        }
      ],

    上面代码中uri属性指定的数据包含了一个三角形3个顶点的索引和顶点位置信息。本身buffer对象所指定的数据是没有任何结构和层次意义的,所以需要使用bufferView和accessor对象来描述数据的结构和层次意义。

    Buffer views

    一个bufferView对象引用了一个buffer对象的一部分数据。对于这个示例来说,包含了2个bufferView对象,它们引用了同一个buffer对象的不同部分数据。第一个bufferView对象引用了三角形的索引数据,数据位置从偏移值byteOffset(0)开始,长度为6字节。第二个bufferView对象引用了三角形的顶点位置数据,数据位置从偏移值byteOffset(8)开始,长度为36字节:

      "bufferViews" : [
        {
          "buffer" : 0,
          "byteOffset" : 0,
          "byteLength" : 6,
          "target" : 34963
        },
        {
          "buffer" : 0,
          "byteOffset" : 8,
          "byteLength" : 36,
          "target" : 34962
        }
      ],

    Accessors

    accessor对象用于描述数据的结构和层次意义。它描述了bufferView所引用数据的解释方式。

    对于本例,包含了两个accessor对象。

    第一个accessor对象描述了顶点的索引数据,它引用了索引为0的bufferView对象,这一bufferView对象引用了顶点索引数据。accessor对象还包含了count,type和componentType3个属性,用来对数据进行描述。对于示例来说,这3个属性描述的的数据元素包含了3个类型为unsigned short的标量,

    第二个accessor对象描述了顶点位置数据。它引用了索引为1的bufferView对象,这一bufferView对象引用了顶点位置数据。对于示例来说,这一accessor对象的count,type和componentType属性描述的数据元素的个数为3,每个数据元素是一个包含3个分量,每个分量类型为float的3D向量。

      "accessors" : [
        {
          "bufferView" : 0,
          "byteOffset" : 0,
          "componentType" : 5123,
          "count" : 3,
          "type" : "SCALAR",
          "max" : [ 2 ],
          "min" : [ 0 ]
        },
        {
          "bufferView" : 1,
          "byteOffset" : 0,
          "componentType" : 5126,
          "count" : 3,
          "type" : "VEC3",
          "max" : [ 1.0, 1.0, 0.0 ],
          "min" : [ 0.0, 0.0, 0.0 ]
        }
      ],

    使用mesh.primitive属性引用accessor对象,通过索引使用几何数据:

      "meshes" : [
        {
          "primitives" : [ {
            "attributes" : {
              "POSITION" : 1
            },
            "indices" : 0
          } ]
        }
      ],

    当需要使用几何数据进行渲染时,渲染程序可以通过引用关系,找到需要的几何数据。通过accessor对象,渲染程序可以获取数据元素的类型以及布局方式。

    asset对象

    对于glTF数据格式的1.0版本,asset对象是可选的,对于之后版本的glTF数据格式,必须包含asset对象,使用version属性指定glTF数据格式的版本。下面代码表示数据使用glTF数据格式的2.0版本进行描述:

      "asset" : {
        "version" : "2.0"
      }

    asset对象还可以包含其它一些描述信息,具体可以参考asset对象的官方规范

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

    GLB下载网(glbxz.com)gltf文件下载-glb格式下载-模型制作 » glTF格式详解(示例:一个最小巧的glTF文件)

    常见问题FAQ

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

    提供最优质的资源集合

    加入VIP
    开通VIP 享更多特权,建议使用 QQ 登录
    ×