下面列举了一个 gltf 文件,详细见注释
{
"asset": {
"generator": "COLLADA2GLTF", //生成工具
"version": "2.0" //基本信息
},
"scene": 0, //当前活跃的场景索引,(这里指向场景列表中的第一个场景。glTF 文件可以包含多个场景,场景是 3D 内容的集合)
"scenes": [ //一个包含场景的数组
{
"nodes": [ //包含该场景中的节点的索引数组。节点是 3D 空间中的基本单位,它们可以是几何体、摄像机、光源等对象
0
]
}
],
"nodes": [ //描述场景中的每个节点。节点通常用于组合和转换 3D 对象
{
"children": [ //子节点的索引数组。节点可以有子节点,这有助于创建层次化结构(例如模型的父子关系
1
],
"matrix": [ //转换矩阵
1.0,
0.0,
0.0,
0.0,
0.0,
0.0,
-1.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
0.0,
1.0
]
},
{
"mesh": 0 //这个矩阵是用于节点 0,表示该节点的空间变换
}
],
"meshes": [ //描述网格数据
{
"primitives": [ //网格的原始数据(如顶点、索引等),可以有多个原始数据数组来描述网格的不同部分(例如,面、边等)
{
"attributes": { //顶点属性。这里,NORMAL 表示法线,POSITION 表示顶点位置。每个属性都与 accessor 的索引相关联,表示该属性的数据如何存储
"NORMAL": 1,
"POSITION": 2
},
"indices": 0,//该网格的索引数据,指向一个缓冲区(0)。索引定义了如何连接顶点来创建三角形面
"mode": 4, //渲染模式。4 表示 TRIANGLES,即使用三角形进行渲染
"material": 0 //材质的索引,这里指向材质
}
],
"name": "Mesh"
}
],
"accessors": [ //访问和解释缓冲区数据的方式,定义了每个数据块的格式
{
"bufferView": 0, //指定数据存储的缓冲区视图的索引
"byteOffset": 0, //数据在缓冲区中的偏移量
"componentType": 5123, //数据元素的类型。5123 表示无符号短整型(UNSIGNED_SHORT),5126 表示浮点数(FLOAT)
"count": 36, //数据中的元素数量
"max": [ //数据的最大值和最小值
23
],
"min": [
0
],
"type": "SCALAR" //数据的类型,SCALAR 表示单一数值,VEC3 表示三维向量
},
{
"bufferView": 1,
"byteOffset": 0,
"componentType": 5126,
"count": 24,
"max": [
1.0,
1.0,
1.0
],
"min": [
-1.0,
-1.0,
-1.0
],
"type": "VEC3"
},
{
"bufferView": 1,
"byteOffset": 288,
"componentType": 5126,
"count": 24,
"max": [
0.5,
0.5,
0.5
],
"min": [
-0.5,
-0.5,
-0.5
],
"type": "VEC3"
}
],
"materials": [ //描述物体表面材质的属性
{
"pbrMetallicRoughness": { //描述基于金属粗糙度的材质模型(PBR)
"baseColorFactor": [ //基础颜色(RGBA)。这里的颜色是红色 (0.8, 0.0, 0.0, 1.0)
0.800000011920929,
0.0,
0.0,
1.0
],
"metallicFactor": 0.0 //金属度,这里是 0.0,意味着材质不具有金属感
},
"name": "Red"
}
],
"bufferViews": [ //定义如何解释缓冲区中的原始数据
{
"buffer": 0, //引用缓冲区的索引
"byteOffset": 576, //缓冲区数据的偏移量
"byteLength": 72, //数据的长度
"target": 34963 //指定缓冲区的目标用途。例如,34963 表示 ARRAY_BUFFER,用于存储顶点数据;34962 表示 ELEMENT_ARRAY_BUFFER,用于存储索引数据
},
{
"buffer": 0,
"byteOffset": 0,
"byteLength": 576,
"byteStride": 12, //字节跨度,表示每个数据元素之间的字节数(如果数据是紧凑存储的,则通常为 0)
"target": 34962
}
],
"buffers": [ //描述存储所有数据的原始二进制缓冲区
{
"byteLength": 648, //缓冲区的字节长度
"uri": "Box0.bin" //缓冲区的 URI,这里指向 Box0.bin,表示二进制数据存储在这个文件中
}
]
}