glTF格式入门(三)--Buffer,BufferView,Accessor
Buffer
一个Buffer表示了一个二进制数据块.
BufferView
BufferView是对Buffer的切分.切分通过byteOffset
和byteLength
两个属性来定义.
同时,每个BufferView对象包括了一个target
属性,用于对BufferView引用的数据进行分类.
"bufferViews" : [ |
上图浅色部分(无意义部分)用于数据对齐.
- 34962: ARRAY_BUFFER, 用于存储顶点数据
- 34963: ELEMENT_ARRAY_BUFFER, 用于存储索引数据
Accessor
一个Accessor对象引用了一个BufferView对象,并定义了如何从BufferView中读取数据.
一个BufferView可以被多个Accessor对象引用,但一个Accessor对象只能引用一个BufferView对象.
"accessors" : [ |
- count: 定义了数据元素的数量
- type: 定义了元素的类型,如SCALAR,VEC3,VEC4
- componentType: 定义了元素的格式,如5123表示FLOAT,5126表示UNSIGNED_SHORT
- max: 定义了元素的最大值(疑似有误)
- min: 定义了元素的最小值(疑似有误)
- byteOffset: 定义了Accessor对象在BufferView中的偏移量
数据对齐
为了让accessor
对象引用的数据能直接交给CPU或GPU处理,因此其引用的数据必须进行对齐.
对齐条件:
accessor
对象的byteOffset
能整除componentType
对应类型accessor
和bufferView
的byteOffset
之和能整除componentType
对应类型
数据交错
由于bufferView
引用的数据可能以结构数组的形式存储,所以需要byteStride
属性来定义结构数组的步长.
稀疏访问器
当有多个3D对象只有少部分顶点位置数据不同时,可以通过稀疏访问器来节省内存.
通过稀疏访问器,只需要村塾3D队形的顶点位置数据一次,然后存储对象间不同的顶点位置数据即可.
"accessors" : [ |
accessor对象中的sparse
属性定义了稀疏访问器.
count
: 定义了需要替换的数据元素数量sparse.indices
: 定义了用于替换的顶点索引数据sparse.values
: 定义了用于包含实际的数据
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 VanishingBlog!