下面是一个最小巧的glTF格式文件的内容,它描述了一个简单的三角形。可以将下面的内容保存到一个gltf文件中,使用任意支持glTF格式文件的渲染程序来渲染它。本章节,我们会基于这个小巧的glTF格式文件内容对glTF格式进行基本的概念介绍。
{
"scenes" : [
{
"nodes" : [ 0 ]
}
],
"nodes" : [
{
"mesh" : 0
}
],
"meshes" : [
{
"primitives" : [ {
"attributes" : {
"POSITION" : 1
},
"indices" : 0
} ]
}
],
"buffers" : [
{
"uri" : "data:application/octet-stream;base64,AAAA为了排版而省略,可以使用英文原文中的代码",
"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结构
glTF格式使用scene对象来描述场景。对glTF数据的JSON文件进行解析时,对场景结构的遍历也是从scene对象开始。每个scene对象引用了一个nodes数组,nodes数组通过索引引用了场景的根结点。
示例中的代码只包含了一个scene对象,这一scene对象引用了一个索引为0的node对象,这个node对象引用了索引为0的mesh对象:
"scenes" : [
{
"nodes" : [ 0 ]
}
],
"nodes" : [
{
"mesh" : 0
}
],
在之后的章节,我们会对scene对象和node对象进行更为详细地介绍。
meshes
mesh对象用于表示场景中出现的3D对象实际的几何数据。mesh对象本身不包含任何属性,只包含了一个primitives对象数组,用于描述整个网格所使用的几何数据。每个primitive对象描述了一部分mesh对象的几何数据。
示例只包含了一个mesh对象,这一mesh对象只包含了一个primitive对象。primitive对象包含了一个attribute对象数组,存储了mesh对象的几何数据信息。对于这个示例来说,只包含了一个POSITION属性,用于描述mesh对象的顶点位置信息。primitive对象的indices属性描述了用于渲染的顶点索引数据,默认情况下,连续3个顶点索引构成一个三角形。
mesh对象实际的几何数据由primitive对象的attributes对象数组和indices对象数组通过引用accessor对象给出:
"meshes" : [
{
"primitives" : [ {
"attributes" : {
"POSITION" : 1
},
"indices" : 0
} ]
}
],
在之后的章节,我们会对mesh对象进行更为详细地介绍。
buffer,bufferView和accessor概念
buffer,bufferView和accessor对象提供了对mesh对象实际的几何数据的描述。我们在这里对它们进行简要地介绍,更为详细的说明会在之后的章节进行。
Buffers
buffer对象描述了一个没有任何结构和层次意义的数据块。它包含了一个uri属性,用于引用外部文件作为数据,或是直接使用数据URI作为数据内容。
对于示例,我们使用数据URI直接在JSON文件中编码长度为44字节的buffer数据:
"buffers" : [
{
"uri" : "data:application/octet-stream;base64,AAAAAAAAA为了排版而省略,可以使用英文原文中代码",
"byteLength" : 44
}
],
上面代码中uri属性指定的数据包含了一个三角形3个顶点的索引和顶点位置信息。本身buffer对象所指定的数据是没有任何结构和层次意义的,所以需要使用bufferView和accessor对象来描述数据的结构和层次意义。
Buffer views
一个bufferView对象引用了一个buffer对象的一部分数据。对于这个示例来说,包含了2个bufferView对象,它们引用了同一个buffer对象的不同部分数据。第一个bufferView对象引用了三角形的索引数据,数据位置从偏移值byteOffset(0)开始,长度为6字节。第二个bufferView对象引用了三角形的顶点位置数据,数据位置从偏移值byteOffset(8)开始,长度为36字节:
"bufferViews" : [
{
"buffer" : 0,
"byteOffset" : 0,
"byteLength" : 6,
"target" : 34963
},
{
"buffer" : 0,
"byteOffset" : 8,
"byteLength" : 36,
"target" : 34962
}
],
Accessors
accessor对象用于描述数据的结构和层次意义。它描述了bufferView所引用数据的解释方式。
对于本例,包含了两个accessor对象。
第一个accessor对象描述了顶点的索引数据,它引用了索引为0的bufferView对象,这一bufferView对象引用了顶点索引数据。accessor对象还包含了count,type和componentType3个属性,用来对数据进行描述。对于示例来说,这3个属性描述的的数据元素包含了3个类型为unsigned short的标量,
第二个accessor对象描述了顶点位置数据。它引用了索引为1的bufferView对象,这一bufferView对象引用了顶点位置数据。对于示例来说,这一accessor对象的count,type和componentType属性描述的数据元素的个数为3,每个数据元素是一个包含3个分量,每个分量类型为float的3D向量。
"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 ]
}
],
使用mesh.primitive属性引用accessor对象,通过索引使用几何数据:
"meshes" : [
{
"primitives" : [ {
"attributes" : {
"POSITION" : 1
},
"indices" : 0
} ]
}
],
当需要使用几何数据进行渲染时,渲染程序可以通过引用关系,找到需要的几何数据。通过accessor对象,渲染程序可以获取数据元素的类型以及布局方式。
asset对象
对于glTF数据格式的1.0版本,asset对象是可选的,对于之后版本的glTF数据格式,必须包含asset对象,使用version属性指定glTF数据格式的版本。下面代码表示数据使用glTF数据格式的2.0版本进行描述:
"asset" : {
"version" : "2.0"
}
asset对象还可以包含其它一些描述信息,具体可以参考asset对象的官方规范。
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性
GLB下载网(glbxz.com)gltf文件下载-glb格式下载-模型制作 » glTF格式详解(示例:一个最小巧的glTF文件)
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载要提取码
- 分享过期和重复下载怎么办
- 模型和平台不兼容怎么办