three.js BufferAttribute

2023-02-16 17:30 更新

這個(gè)類用于存儲(chǔ)與BufferGeometry相關(guān)聯(lián)的 attribute(例如頂點(diǎn)位置向量,面片索引,法向量,顏色值,UV坐標(biāo)以及任何自定義 attribute )。 利用 BufferAttribute,可以更高效的向GPU傳遞數(shù)據(jù)。詳情和例子見該頁。

在 BufferAttribute 中,數(shù)據(jù)被存儲(chǔ)為任意長度的矢量(通過itemSize進(jìn)行定義),下列函數(shù)如無特別說明, 函數(shù)參數(shù)中的index會(huì)自動(dòng)乘以矢量長度進(jìn)行計(jì)算。在處理類似矢量的數(shù)據(jù)時(shí),Vector2、Vector3、Vector4 和 Color 類上的 .fromBufferAttribute( attribute, index ) 輔助方法可能會(huì)有所幫助。

構(gòu)造函數(shù)

BufferAttribute( array : TypedArray, itemSize : Integer, normalized : Boolean )

array -- 必須是 TypedArray. 類型,用于實(shí)例化緩存。該隊(duì)列應(yīng)該包含:

itemSize * numVertices

個(gè)元素,numVertices 是 BufferGeometry中的頂點(diǎn)數(shù)目

itemSize -- 隊(duì)列中與頂點(diǎn)相關(guān)的數(shù)據(jù)值的大小。舉例,如果 attribute 存儲(chǔ)的是三元組(例如頂點(diǎn)空間坐標(biāo)、法向量或顏色值)則itemSize的值應(yīng)該是3。

normalized -- (可選) 指明緩存中的數(shù)據(jù)如何與GLSL代碼中的數(shù)據(jù)對應(yīng)。例如,如果array是 UInt16Array類型,且normalized的值是 true,則隊(duì)列中的值將會(huì)從 0 - +65535 映射為 GLSL 中的 0.0f - +1.0f。 如果array是 Int16Array (有符號),則值將會(huì)從 -32768 - +32767 映射為 -1.0f - +1.0f。若 normalized 的值為 false,則數(shù)據(jù)映射不會(huì)歸一化,而會(huì)直接映射為 float 值,例如,32767 將會(huì)映射為 32767.0f.

屬性

.array : TypedArray

在 array 中保存著緩存中的數(shù)據(jù)。

.count : Integer

保存 array 除以 itemSize 之后的大小。若緩存存儲(chǔ)三元組(例如頂點(diǎn)位置、法向量、顏色值),則該值應(yīng)等于隊(duì)列中三元組的個(gè)數(shù)。

.isBufferAttribute : Boolean

只讀標(biāo)志,用于檢查給定對象是否屬于 BufferAttribute 類型。

.itemSize : Integer

保存在 array 中矢量的長度。

.name : String

該 attribute 實(shí)例的別名,默認(rèn)值為空字符串。

.needsUpdate : Boolean

該標(biāo)志位指明當(dāng)前 attribute 已經(jīng)被修改過,且需要再次送入 GPU 處理。當(dāng)開發(fā)者改變了該隊(duì)列的值,則標(biāo)志位需要設(shè)置為 true。將標(biāo)志位設(shè)為 true 同樣會(huì)增加 version 的值。

.normalized : Boolean

指明緩存中數(shù)據(jù)在轉(zhuǎn)化為GLSL著色器代碼中數(shù)據(jù)時(shí)是否需要被歸一化。詳見構(gòu)造函數(shù)中的說明。

.onUploadCallback : Function

attribute 數(shù)據(jù)傳輸?shù)紾PU后的回調(diào)函數(shù)。

.updateRange : Object

對象包含如下成員:offset: 默認(rèn)值為 0。 指明更新的起始位置。count: 默認(rèn)值為 -1,表示不指定更新范圍。該值只可以被用于更新某些矢量數(shù)據(jù)(例如,顏色相關(guān)數(shù)據(jù))。

.usage : Usage

為優(yōu)化目的定義數(shù)據(jù)存儲(chǔ)的預(yù)期使用模式。對應(yīng)WebGLRenderingContext.bufferData()的usage參數(shù)。默認(rèn)值為 StaticDrawUsage。查看所有可能值的使用常量。

.version : Integer

版本號,當(dāng) needsUpdate 被設(shè)置為 true 時(shí),該值會(huì)自增。

方法

.applyMatrix3 ( m : Matrix3 ) : this

將矩陣 m 應(yīng)用于此 BufferAttribute 的每個(gè) Vector3 元素。

.applyMatrix4 ( m : Matrix4 ) : this

將矩陣 m 應(yīng)用于此 BufferAttribute 的每個(gè) Vector3 元素。

.applyNormalMatrix ( m : Matrix3 ) : this

將普通矩陣 m 應(yīng)用于此 BufferAttribute 的每個(gè) Vector3 元素。

.transformDirection ( m : Matrix4 ) : this

將矩陣 m 應(yīng)用于此 BufferAttribute 的每個(gè) Vector3 元素,將元素解釋為方向向量。

.clone () : BufferAttribute

返回該 BufferAttribute 的拷貝。

.copyArray ( array ) : this

將參數(shù)中所給定的普通隊(duì)列或 TypedArray 拷貝到 array 中。拷貝 TypedArray 相關(guān)注意事項(xiàng)詳見 TypedArray.set。

.copyAt ( index1 : Integer, bufferAttribute : BufferAttribute, index2 : Integer ) : this

將一個(gè)矢量從 bufferAttribute[index2] 拷貝到 array[index1] 中。

.getX ( index : Integer ) : Number

獲取給定索引的矢量的第一維元素 (即 X 值)。

.getY ( index : Integer ) : Number

獲取給定索引的矢量的第二維元素 (即 Y 值)。

.getZ ( index : Integer ) : Number

獲取給定索引的矢量的第三維元素 (即 Z 值)。

.getW ( index : Integer ) : Number

獲取給定索引的矢量的第四維元素 (即 W 值)。

.onUpload ( callback : Function ) : this

見 onUploadCallback 屬性。在 WebGL / Buffergeometry 中,該方在緩存數(shù)據(jù)傳遞給 GPU 后,用于釋放內(nèi)存。

.set ( value : Array, offset : Integer ) : this

value -- 被拷貝的 Array 或 TypedArray 類型的數(shù)據(jù)。offset -- (可選) array 中開始拷貝的位置索引。對 array,調(diào)用 TypedArray.set( value, offset ) 方法。特別的, 對將 value 轉(zhuǎn)為 TypedArray 的要求詳見上述鏈接。

.setUsage ( value : Usage ) : this

將用法設(shè)置為值。查看所有可能輸入值的使用常量。

.setX ( index : Integer, x : Float ) : this

設(shè)置給定索引的矢量的第一維數(shù)據(jù)(設(shè)置 X 值)。

.setY ( index : Integer, y : Float ) : this

設(shè)置給定索引的矢量的第二維數(shù)據(jù)(設(shè)置 Y 值)。

.setZ ( index : Integer, z : Float ) : this

設(shè)置給定索引的矢量的第三維數(shù)據(jù)(設(shè)置 Z 值)。

.setW ( index : Integer, w : Float ) : this

設(shè)置給定索引的矢量的第四維數(shù)據(jù)(設(shè)置 W 值)。

.setXY ( index : Integer, x : Float, y : Float ) : this

設(shè)置給定索引的矢量的第一、二維數(shù)據(jù)(設(shè)置 X 和 Y 值)。

.setXYZ ( index : Integer, x : Float, y : Float, z : Float ) : this

設(shè)置給定索引的矢量的第一、二、三維數(shù)據(jù)(設(shè)置 X、Y 和 Z 值)。

.setXYZW ( index : Integer, x : Float, y : Float, z : Float, w : Float ) : this

設(shè)置給定索引的矢量的第一、二、三、四維數(shù)據(jù)(設(shè)置 X、Y、Z 和 W 值)。

源代碼

src/core/BufferAttribute.js


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號