glTF格式介绍总目录:https://blog.csdn.net/qq_31709249/article/details/86477520
原文地址:https://github.com/javagl/glTF-Tutorials/blob/master/gltfTutorial/gltfTutorial_003_MinimalGltfFile.md
下面是一个最简单的glTF文件
{
"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
},
{
"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"
}
}
其具体的数据构成为:
每个scene包含一个叫nodes的数组,里面包含了node的索引。
"scenes" : [
{
"nodes" : [ 0 ]
}
],
"nodes" : [
{
"mesh" : 0
}
],
每个mesh结构代表一个在场景中出现的真实的几何实例,mesh本身不包含任何属性,只包含一个mesh.primitive图元数组对象,作为模型的组成部分。每个图元包含一个对mesh几何数据的描述。
下面的例子只包含一个mesh,并且只有一个图元。图元中有一个attributes数组,描述了mesh几何对象的顶点属性。此处只有Position属性用来描述顶点位置。通过indices属性,可以知道该mesh是一个索引几何。例子中indices为0,表示使用第一个accessor来解析该mesh。默认描述的是三角形。
"meshes" : [
{
"primitives" : [ {
"attributes" : {
"POSITION" : 1
},
"indices" : 0
} ]
}
],
这三个属性提供了mesh图元的几何数据信息.
1)buffer包含一个uri,通过这个uri,可以指向一个外部的二进制文件(.bin文件),或者也可以在json文件中直接包含二进制数据块
2)此外还有要给byteLength属性,定义了数据的长度
例子中有两个bufferview,第一个是三角形的索引,第二个则是三角形的顶点位置
"bufferViews" : [
{
"buffer" : 0,
"byteOffset" : 0,
"byteLength" : 6,
"target" : 34963
},
{
"buffer" : 0,
"byteOffset" : 8,
"byteLength" : 36,
"target" : 34962
}
],
例子中有两个accessor,第一个访问器描述了几何数据的索引,通过bufferview:0可知,它是第一个bufferview的访问器。该访问器中有三个标量,数据类型是unsigned shorttype
第二个访问器中有三个三维向量,数据类型是float
"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 ]
}
],