glTF基本结构

1,090 阅读2分钟
  • blog.csdn.net/qq_31709249…
  • glTF的全称是GL传输格式,是一种针对GL(WebGL,OpenGL ES以及OpenGL)接口的运行时资产(asset)。
  • glTF资产包含零个或多个场景,scene.nodes数组中全部的节点都必须是根节点
  • 节点层次结构使用children属性来定义,如"childredn":[1,2,3,4]
  • 节点经过matrix属性和rotation、scale、translation属性来定义空间变换。ratation属性是单位四元数值(x,y,z,w),如"rotation":[0,0,0,1];scale和translatiion属性是单位三元数值,如"scale":[1,1,1]、"translation":[-17,-11,2] image.png image.png
  • scene:场景入口,由node构成树结构
  • node:场景层级中的一个节点,包含变换,能够有子节点。node经过指向mesh,camera,skin来描述Node的形变
  • camera:定义渲染场景的视点配置
  • mesh:描述场景中的几何物体,经过accessor来访问;经过扩展网格概念来定义变形目标,变形目标是可变的网格,其经过Mesh primitives中定义的targets属性实现,一般仅支持三个属性POSITION(位置位移),NORMAL(法线位移)和TANGENT(切线位移)。编
  • skin:蒙皮的网格是用顶点属性定义的,影响一个顶点的关节数限制为每组4个,所以访问器必须具备VEC4类型。
  • texture:glTF将纹理访问分为三种不一样的对象类型:纹理,图像和采样器。
  • material:glTF使用基于物理渲染(PBR)普遍使用的材料表示一组通用参数来定义材料。
  • animation:glTF经过节点变换的关键帧动画支持关节动画和蒙皮动画,关键帧数据存储在缓存中,并经过访问器在动画中引用。
  • extensions:任何glTF对象均可以具备可选的extensions属性。
  • "bufferView"表示数据在buffer中的子集,glTF文件中的对象不会直接访问buffer和bufferView,而是经过Accessor访问器来访问。
  • buffer存储二进制数据,包含几何体、网格、动画和蒙皮等大数据文件,并经过访问器(accessor)进行检索。"byteLength"指定缓存文件的大小,"uri"属性是URI到buffer的数据,buffer数据也能够做为base64编码的数据存储在glTF文件中,并经过URI进行引用
{
  "scenes" : [
    {
      "nodes" : [ 0 ]
    }
  ],
  
  "nodes" : [
    {
      "mesh" : 0
    }
  ],
  
  "meshes" : [
    {
      "primitives" : [ {
        "attributes" : {
          "POSITION" : 1
        },
        "indices" : 0
      } ]
    }
  ],
 
  "buffers" : [
    {
      "uri" : "data:application/octet-stream;base64,AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAA=",
      "byteLength" : 44
    }
  ],
  "bufferViews" : [
    {
      "buffer" : 0,
      "byteOffset" : 0,
      "byteLength" : 6,
      "target" : 34963 //34962代表ARRAY_BUFFER,34963代表ELEMENT_ARRAY_BUFFER
    },
    {
      "buffer" : 0,
      "byteOffset" : 8,
      "byteLength" : 36,
      "target" : 34962
    }
  ],
  //一个accessor对应一个bufferview,用来定义bufferview的数据类型、数据格式和布局
  "accessors" : [
    {
      "bufferView" : 0,
      "byteOffset" : 0,
      "componentType" : 5123,//512为FLOAT类型
      "count" : 3,
      "type" : "SCALAR",//type属性用来表明数据元素是标量(SCALLAR)、矢量(VEC3)还是矩阵(MAT4)
      "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"
  }
}