GLTF格式说明

一、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

       

 

 

 

 

 

 

 

 

 

 

 

 

案例:

 GLTF格式说明

2、 scenes

       scene是glTF的入口。一个glTF可能包含多个scene,但是大多数情况下,只包含一个。每个scene包含一个nodes数组,形成场景的root节点,nodes数组中可以存在多个node,让一个场景有多个root,但一般情况下只有一个root node。

      参数:

 

类型

描述

是否必须

nodes

integer [1-*]

节点的下标

必须为根节点

name

string

名字

No

extensions

object

属性拓展

No

extras

any

附加信息

No

 

 

 

 

 

 

 

 

 

 

 案例:

    GLTF格式说明

3、  Nodes形成场景图(层次)结构

      每个node可以包含一个叫children的数组,所以每个node都是一个具有层级关系的,所有的节点共同构成了场景的层级结构(类似OSG)。

      参数:

 

类型

描述

是否必须

camera

integer

摄像机节点,跟着摄像机矩阵。

No

children

integer [1-*]

子节点列表

No

skin

integer

蒙皮节点

No

matrix

number [16]

矩阵

No, default: [1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]

mesh

integer

物体节点

No

rotation

number [4]

四元数旋转

No, default: [0,0,0,1]

scale

number [3]

缩放比

No, default: [1,1,1]

translation

number [3]

位置信息

No, default: [0,0,0]

weights

number [1-*]

mesh的权重数组

No

name

string

名字

No

extensions

object

属性拓展

No

extras

any

附加信息

No

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

案例:

    GLTF格式说明

4、 mesh结构

    每个mesh结构代表一个在场景中出现的真实的几何实例,mesh本身不包含任何属性,只包含一个mesh.primitive图元数组对象,作为模型的组成部分。每个图元包含一个对mesh几何数据的描述。

     图元中有一个attributes数组,描述了mesh几何对象的顶点属性。此处只有Position属性用来描述顶点位置。通过indices属性,可以知道该mesh是一个索引几何。例子中indices为1,表示使用第二个accessor来解析该mesh。  

              GLTF格式说明

    默认情况下,mesh primitive的渲染模式为三角形。但是通过mode属性,可以指定其他渲染模式。glTF支持的渲染模式有

      GLTF格式说明

5、 buffer、bufferview和accessor

  这三个属性提供了mesh图元的几何数据信息。

 (1) buffers:定义了一个原始的数据块

      1) buffer包含一个uri,通过这个uri,可以指向一个外部的二进制文件(.bin文件),或者也可以在json文件中直接包含二进制数据块

        GLTF格式说明

 

       GLTF格式说明

      2) 此外还有要给byteLength属性,定义了数据的长度

(2) bufferviews:bufferview是buffer的“块”或“切片”,target可以是一个常量指示数据是用于顶点属性(34962,表示ARRAY_BUFFER),或者该数据被用于顶点索引(34963,表示ELEMENT_ARRAY_BUFFER)。

    GLTF格式说明

(3) accessor通过描述数据类型和布局,来描述bufferview中的数据应如何解读。一个accessor对应一个bufferview,用来定义bufferview的数据类型、数据格式和布局。

     GLTF格式说明

        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

    GLTF格式说明

    name:材质名称

    baseColorFactor:RGBA颜色

7、 texture

定义了一个sampler对象和一个image对象。sampler对象定义了image对象在3D对象上的张贴方式。

 GLTF格式说明

8、 Images:

    GLTF格式说明

9、 samplers

    GLTF格式说明

二、数据示例:

GLTF格式说明
 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 }
展开

 

上一篇:关于GLTF格式的综述、结构与TS解析


下一篇:「Linux」- 将网页应用变为桌面应用 @20210211