[name]

这个类用于存储与[page:BufferGeometry]相关联的 attribute(例如顶点位置向量,面片索引,法向量,颜色值,UV坐标以及任何自定义 attribute )。 利用 BufferAttribute,可以更高效的向GPU传递数据。详情和例子见该页。

在 BufferAttribute 中,数据被存储为任意长度的矢量(通过[page:BufferAttribute.itemSize itemSize]进行定义),下列函数如无特别说明, 函数参数中的index会自动乘以矢量长度进行计算。

构造函数

[name]( [param:TypedArray array], [param:Integer itemSize], [param:Boolean normalized] )

[page:TypedArray array] -- 必须是 [link:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/TypedArray TypedArray]. 类型,用于实例化缓存。
该队列应该包含: itemSize * numVertices 个元素,numVertices 是 [page:BufferGeometry BufferGeometry]中的顶点数目

[page:Integer itemSize] -- 队列中与顶点相关的数据值的大小。举例,如果 attribute 存储的是三元组(例如顶点空间坐标、法向量或颜色值)则itemSize的值应该是3。

[page:Boolean normalized] -- (可选) 指明缓存中的数据如何与GLSL代码中的数据对应。例如,如果[page:TypedArray array]是 UInt16Array类型,且[page:Boolean normalized]的值是 true,则队列中的值将会从 0 - +65535 映射为 GLSL 中的 0.0f - +1.0f。 如果[page:TypedArray array]是 Int16Array (有符号),则值将会从 -32767 - +32767 映射为 -1.0f - +1.0f。若 [page:Boolean normalized] 的值为 false,则数据映射不会归一化,而会直接映射为 float 值,例如,32767 将会映射为 32767.0f.

属性

[property:TypedArray array]

在 [page:TypedArray array] 中保存着缓存中的数据。

[property:Integer count]

保存 [page:BufferAttribute.array array] 除以 [page:BufferAttribute.itemSize itemSize] 之后的大小。

若缓存存储三元组(例如顶点位置、法向量、颜色值),则该值应等于队列中三元组的个数。

[property:Integer itemSize]

保存在 [page:BufferAttribute.array array] 中矢量的长度。

[property:String name]

该 attribute 实例的别名,默认值为空字符串。

[property:Boolean needsUpdate]

该标志位指明当前 attribute 已经被修改过,且需要再次送入 GPU 处理。当开发者改变了该队列的值,则标志位需要设置为 true。

将标志位设为 true 同样会增加 [page:BufferAttribute.version version] 的值。

[property:Boolean normalized]

指明缓存中数据在转化为GLSL着色器代码中数据时是否需要被归一化。详见构造函数中的说明。

[property:Function onUploadCallback]

attribute 数据传输到GPU后的回调函数。

[property:Object updateRange]

对象包含如下成员:
[page:Integer offset]: 默认值为 *0*。 指明更新的起始位置。
[page:Integer count]: 默认值为 *-1*,表示不指定更新范围。

该值只可以被用于更新某些矢量数据(例如,颜色相关数据)。

[property:Usage usage]

Defines the intended usage pattern of the data store for optimization purposes. Corresponds to the *usage* parameter of [link:https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/bufferData WebGLRenderingContext.bufferData](). Default is [page:BufferAttributeUsage StaticDrawUsage]. See usage [page:BufferAttributeUsage constants] for all possible values.

[property:Integer version]

版本号,当 [page:BufferAttribute.needsUpdate needsUpdate] 被设置为 true 时,该值会自增。

方法

[method:this applyMatrix3]( [param:Matrix3 m] )

Applies matrix [page:Matrix3 m] to every Vector3 element of this BufferAttribute.

[method:this applyMatrix4]( [param:Matrix4 m] )

Applies matrix [page:Matrix4 m] to every Vector3 element of this BufferAttribute.

[method:this applyNormalMatrix]( [param:Matrix3 m] )

Applies normal matrix [page:Matrix3 m] to every Vector3 element of this BufferAttribute.

[method:this transformDirection]( [param:Matrix4 m] )

Applies matrix [page:Matrix4 m] to every Vector3 element of this BufferAttribute, interpreting the elements as a direction vectors.

[method:BufferAttribute clone]()

返回该 BufferAttribute 的拷贝。

[method:this copyArray]( array )

将参数中所给定的普通队列或 TypedArray 拷贝到 [page:BufferAttribute.array array] 中。

拷贝 TypedArray 相关注意事项详见 [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set TypedArray.set]。

[method:this copyAt] ( [param:Integer index1], [param:BufferAttribute bufferAttribute], [param:Integer index2] )

将一个矢量从 bufferAttribute[index2] 拷贝到 [page:BufferAttribute.array array][index1] 中。

[method:this copyColorsArray]( [param:Array colors] )

将一个存储 RGB 颜色值的队列拷贝到 [page:BufferAttribute.array array] 中。

[method:this copyVector2sArray]( [param:Array vectors] )

将一个存储 [page:Vector2] 的队列拷贝到 [page:BufferAttribute.array array] 中。

[method:this copyVector3sArray]( [param:Array vectors] )

将一个存储 [page:Vector3] 的队列拷贝到 [page:BufferAttribute.array array] 中。

[method:this copyVector4sArray]( [param:Array vectors] )

将一个存储 [page:Vector4] 的队列拷贝到 [page:BufferAttribute.array array] 中。

[method:Number getX]( [param:Integer index] )

获取给定索引的矢量的第一维元素 (即 X 值)。

[method:Number getY]( [param:Integer index] )

获取给定索引的矢量的第二维元素 (即 Y 值)。

[method:Number getZ]( [param:Integer index] )

获取给定索引的矢量的第三维元素 (即 Z 值)。

[method:Number getW]( [param:Integer index] )

获取给定索引的矢量的第四维元素 (即 W 值)。

[method:this onUpload]( [param:Function callback] )

见 onUploadCallback 属性。

在 [example:webgl_buffergeometry WebGL / Buffergeometry] 中,该方在缓存数据传递给 GPU 后,用于释放内存。

[method:this set] ( [param:Array value], [param:Integer offset] )

value -- 被拷贝的 [page:Array] 或 [page:TypedArray] 类型的数据。
offset -- (可选) [page:BufferAttribute.array array] 中开始拷贝的位置索引。

对 [page:BufferAttribute.array array],调用 [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set TypedArray.set]( [page:Array value], [page:Integer offset] ) 方法。

特别的, 对将 [page:Array value] 转为 [page:TypedArray] 的要求详见上述链接。

[method:this setUsage] ( [param:Usage value] )

Set [page:BufferAttribute.usage usage] to value. See usage [page:BufferAttributeUsage constants] for all possible input values.

[method:this setX]( [param:Integer index], [param:Float x] )

设置给定索引的矢量的第一维数据(设置 X 值)。

[method:this setY]( [param:Integer index], [param:Float y] )

设置给定索引的矢量的第二维数据(设置 Y 值)。

[method:this setZ]( [param:Integer index], [param:Float z] )

设置给定索引的矢量的第三维数据(设置 Z 值)。

[method:this setW]( [param:Integer index], [param:Float w] )

设置给定索引的矢量的第四维数据(设置 W 值)。

[method:this setXY]( [param:Integer index], [param:Float x], [param:Float y] )

设置给定索引的矢量的第一、二维数据(设置 X 和 Y 值)。

[method:this setXYZ]( [param:Integer index], [param:Float x], [param:Float y], [param:Float z] )

设置给定索引的矢量的第一、二、三维数据(设置 X、Y 和 Z 值)。

[method:this setXYZW]( [param:Integer index], [param:Float x], [param:Float y], [param:Float z], [param:Float w] )

设置给定索引的矢量的第一、二、三、四维数据(设置 X、Y、Z 和 W 值)。

源代码

[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]