总目录 >> threejs入门进阶到实战(目前已更新入门篇、基础篇和进阶篇)
5 buffer缓存、bufferView视窗、accesors访问器
buffer
, bufferView
,和 accessor
对象已经在**3、最小GLTF文件 **提到,本节将会详细解释它们的含义。
Buffers 缓存
缓冲区buffer
表示原始二进制数据块,没有内在的结构或含义。缓冲区使用其uri
引用此数据。这个URI可以指向外部文件,也可以是直接在JSON文件中编码二进制数据的数据URI。最小的glTF文件包含一个缓冲区示例,其中包含44字节的数据,编码在数据URI中:
"buffers" : [
{
"uri" : "data:application/octet-stream;base64,AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAA=",
"byteLength" : 44
}
],
buffer
缓冲区的部分数据可能作为顶点属性或索引传递给渲染器,或者数据可能包含蒙皮信息或动画关键帧。为了能够使用此数据,需要有关此数据的结构和类型的其他信息。
BufferViews 缓冲区视图
从缓冲区buffer
构造数据的第一步是使用bufferView
对象。bufferView
表示一个缓冲区的数据的“切片”。此切片使用偏移量和长度定义(以字节为计量单位)。最小的glTF文件定义了两个bufferView
对象:
"bufferViews" : [
{
"buffer" : 0,
"byteOffset" : 0,
"byteLength" : 6,
"target" : 34963
},
{
"buffer" : 0,
"byteOffset" : 8,
"byteLength" : 36,
"target" : 34962
}
],
第一个bufferView
指向的 是缓冲区数据的前6个字节。第二个指向的是36字节的缓冲区,偏移量为8字节,如图所示:
图 5b: buffer views缓冲区视图, 指向缓冲区的各部分
浅灰色显示的字节(有2个字节的位置,也就是6-8)是正确对齐访问器accesors所需的填充字节,如下所述。
每个bufferView
还包含一个目标target
属性。渲染器程序可以稍后使用此属性对缓冲区视图引用的数据的类型或性质进行分类。目标target
可以是一个常量,表示数据用于顶点属性(34962
,表示数组缓冲区ARRAY_BUFFER
),或数据用于顶点索引(34963,表示元素数组缓冲区ELEMENT_ARRAY_BUFFER
)。
此时,buffer
缓冲区数据被划分为了多个部分,每个部分由一个bufferView
描述。但是为了在渲染器中真正使用这些数据,需要有关数据类型和布局的其他信息。
Accessors访问器
访问器accessor
对象指向bufferView
并包含定义此bufferView
的数据类型和布局的属性。
Data type 数据类型
访问器数据的类型在type
和 componentType
属性中被编码。type
属性的值是一个字符串,表示数据元素是标量、向量还是矩阵。例如,对于标量值,使用"SCALAR"
;对于三维向量,该值可以是"VEC3"
;对于4×4矩阵,该值可以是"MAT4"
。
componentType
指定这些数据元素的组件的类型。这是一个GL常量,可以是5126
(FLOAT
)或5123
(UNSIGNED_SHORT
),以指示元素分别具有FLOAT
或UNSIGNED SHORT
组件。
这些属性的不同组合可用于描述任意数据类型。例如,最小的glTF文件包含两个访问器:
"accessors" : [
{
"bufferView" :