一、gltf格式说明
1、 asset
asset属性是每一个gltf资源的必要属性,也是区分json和gltf的关键属性。
参数:
|
类型 |
描述 |
是否必须 |
copyright |
string |
版权信息 |
No |
generator |
string |
生成该资源的工具 |
No |
version |
string |
当前版本 |
Yes |
minVersion |
string |
最下的目标版本 |
No |
extensions |
object |
属性拓展 |
No |
extras |
any |
附加信息 |
No |
案例:
2、 scenes
scene是glTF的入口。一个glTF可能包含多个scene,但是大多数情况下,只包含一个。每个scene包含一个nodes数组,形成场景的root节点,nodes数组中可以存在多个node,让一个场景有多个root,但一般情况下只有一个root node。
参数:
类型 |
描述 |
是否必须 |
|
nodes |
|
节点的下标 |
必须为根节点 |
name |
|
名字 |
No |
extensions |
|
属性拓展 |
No |
extras |
|
附加信息 |
No |
案例:
3、 Nodes形成场景图(层次)结构
每个node可以包含一个叫children的数组,所以每个node都是一个具有层级关系的,所有的节点共同构成了场景的层级结构(类似OSG)。
参数:
类型 |
描述 |
是否必须 |
|
camera |
|
摄像机节点,跟着摄像机矩阵。 |
No |
children |
|
子节点列表 |
No |
skin |
|
蒙皮节点 |
No |
matrix |
|
矩阵 |
No, default: |
mesh |
|
物体节点 |
No |
rotation |
|
四元数旋转 |
No, default: |
scale |
|
缩放比 |
No, default: |
translation |
|
位置信息 |
No, default: |
weights |
|
mesh的权重数组 |
No |
name |
|
名字 |
No |
extensions |
|
属性拓展 |
No |
extras |
|
附加信息 |
No |
案例:
4、 mesh结构
每个mesh结构代表一个在场景中出现的真实的几何实例,mesh本身不包含任何属性,只包含一个mesh.primitive图元数组对象,作为模型的组成部分。每个图元包含一个对mesh几何数据的描述。
图元中有一个attributes数组,描述了mesh几何对象的顶点属性。此处只有Position属性用来描述顶点位置。通过indices属性,可以知道该mesh是一个索引几何。例子中indices为1,表示使用第二个accessor来解析该mesh。
默认情况下,mesh primitive的渲染模式为三角形。但是通过mode属性,可以指定其他渲染模式。glTF支持的渲染模式有
5、 buffer、bufferview和accessor
这三个属性提供了mesh图元的几何数据信息。
(1) buffers:定义了一个原始的数据块
1) buffer包含一个uri,通过这个uri,可以指向一个外部的二进制文件(.bin文件),或者也可以在json文件中直接包含二进制数据块
2) 此外还有要给byteLength属性,定义了数据的长度
(2) bufferviews:bufferview是buffer的“块”或“切片”,target可以是一个常量指示数据是用于顶点属性(34962,表示ARRAY_BUFFER),或者该数据被用于顶点索引(34963,表示ELEMENT_ARRAY_BUFFER)。
(3) accessor通过描述数据类型和布局,来描述bufferview中的数据应如何解读。一个accessor对应一个bufferview,用来定义bufferview的数据类型、数据格式和布局。
1) bufferview字段描述该访问器是针对哪个bufferview。
2) bufferoffset属性,用来表明bufferview的数据从什么地方开始读取。
3) count属性,描述数据长度。
4) type属性,数据类型(标量(SCALLAR)、矢量(VEC3)还是矩阵(MAT4))。
5) componentType描述的是变量类型(如float)。--BYTE = 5120,UNSIGNED_BYTE = 5121,SHORT = 5122,UNSIGNED_SHORT = 5123,UNSIGNED_INT = 5125,FLOAT = 5126
6) min、max,每种类型的属性数据的最大最小值,在顶点position情况下,min和max属性定义了几何对象的包围盒边界,这对碰撞检测和视锥体裁剪非常有用。
6、 materials
name:材质名称
baseColorFactor:RGBA颜色
7、 texture:
定义了一个sampler对象和一个image对象。sampler对象定义了image对象在3D对象上的张贴方式。
8、 Images:
9、 samplers
二、数据示例:
1 { 2 "asset": { 3 "version": "2.0" 4 }, 5 "scenes": [{ 6 "nodes": [0] 7 } 8 ], 9 "nodes": [{ 10 "children": [1, 2, 3], 11 "name": "rootNode" 12 }, { 13 "name": "M5", 14 "extras": { 15 "elementGuid": "006b92a5-80f6-4bdc-b1de-f09bb713e4c5" 16 }, 17 "mesh": 0 18 }, { 19 "name": "F2-外墙-空心砖-240mm", 20 "extras": { 21 "elementGuid": "00d5d5cb-1968-4d80-ae22-da15c6176eef" 22 }, 23 "mesh": 1 24 } 25 ], 26 "meshes": [{ 27 "primitives": [{ 28 "mode": 4, 29 "indices": 1, 30 "material": 0, 31 "attributes": { 32 "POSITION": 0 33 } 34 } 35 ] 36 }, { 37 "primitives": [{ 38 "mode": 4, 39 "indices": 3, 40 "material": 1, 41 "attributes": { 42 "POSITION": 2 43 } 44 } 45 ] 46 } 47 ], 48 "buffers": [{ 49 "byteLength": 18624, 50 "uri": "\\B91DCCD0-9768-4EF9-BD8C-158BF461A7ED.bin" 51 }, { 52 "byteLength": 3264, 53 "uri": "\\7CCD787D-F469-4515-9016-C7D1AE4CA3D2.bin" 54 } 55 ], 56 "bufferViews": [{ 57 "buffer": 0, 58 "byteLength": 13968, 59 "byteOffset": 0, 60 "target": 34962 61 }, { 62 "buffer": 0, 63 "byteLength": 4656, 64 "byteOffset": 13968, 65 "target": 34963 66 }, { 67 "buffer": 1, 68 "byteLength": 2448, 69 "byteOffset": 0, 70 "target": 34962 71 }, { 72 "buffer": 1, 73 "byteLength": 816, 74 "byteOffset": 2448, 75 "target": 34963 76 } 77 ], 78 "materials": [{ 79 "name": "木材-刨花板", 80 "pbrMetallicRoughness": { 81 "metallicFactor": 0.0, 82 "roughnessFactor": 1.0, 83 "baseColorFactor": [0.85490197, 0.6784314, 0.14509805, 1.0] 84 }, 85 "alphaMode": "BLEND" 86 }, { 87 "name": "米黄色涂料", 88 "pbrMetallicRoughness": { 89 "metallicFactor": 0.0, 90 "roughnessFactor": 1.0, 91 "baseColorFactor": [0.2784314, 0.28627452, 0.2901961, 1.0] 92 }, 93 "alphaMode": "BLEND" 94 } 95 ] 96 }展开