套件 | flash.display3D |
類別 | public class VertexBuffer3D |
繼承 | VertexBuffer3D Object |
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 11, AIR 3 |
使用 VertexBuffer3D 物件可以定義一組頂點中與每個點關聯的資料。您可以從向量陣列或 ByteArray 上傳頂點資料 (上傳之後,就不再參考原始陣列中的資料;變更或捨棄來源陣列並不會變更頂點資料)。
與每個頂點關聯的資料採用應用程式定義的格式,並且可當做頂點著色器程式的輸入使用。使用 Context3D setVertexBufferAt()
函數識別哪些值屬於哪些頂點程式輸入。頂點程式最多可以使用 8 個輸入 (又稱為頂點屬性暫存器)。每個輸入需要 1 到 4 個 32 位元值。例如,頂點的 [x,y,z] 位置座標可以傳遞至頂點程式,做為包含 3 個 32 位元值的向量。Context3DVertexBufferFormat 類別會針對著色器輸入的支援格式定義常數。您最多可以為每個點的值提供 64 個 32 位元值 (256 位元組) (在這個情況中,單一頂點著色器無法使用所有資料)。
setVertexBufferAt()
函數也會識別哪些頂點緩衝區可用來顯示任何後續 drawTriangles()
呼叫。若要從不同頂點緩衝區顯示資料,請搭配適當的引數再次呼叫 setVertexBufferAt()
(您可以儲存多個頂點緩衝區中相同點的資料,例如,一個緩衝區中的位置資料及另一個緩衝區中的紋理座標,但是如果點的所有資料都來自同一個緩衝區,顯示會更有效率)。
傳遞至 Context3D drawTriangles()
方法的 Index3DBuffer 物件,會將頂點資料組織成三角形。索引緩衝區中的每個值都是頂點緩衝區中頂點的索引。一組連續的三個索引會定義三角形。
您無法直接建立 VertexBuffer3D 物件。請改用 Context3D createVertexBuffer()
方法。
若要釋放與頂點緩衝區關聯的顯示內容資源,請呼叫物件的 dispose()
方法。
相關 API 元素
方法 | 定義自 | ||
---|---|---|---|
釋放與這個物件關聯的所有資源。 | VertexBuffer3D | ||
指出物件是否有已定義的指定屬性。 | Object | ||
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。 | Object | ||
指出指定的屬性是否存在,以及是否可列舉。 | Object | ||
為迴圈作業設定動態屬性的可用性。 | Object | ||
傳回代表此物件的字串,根據地區特定慣例進行格式化。 | Object | ||
會傳回指定之物件的字串形式。 | Object | ||
從位元組陣列上傳一組點的資料到顯示內容。 | VertexBuffer3D | ||
從頂點陣列上傳一組點的資料到顯示內容。 | VertexBuffer3D | ||
會傳回指定之物件的基本值。 | Object |
dispose | () | 方法 |
public function dispose():void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 11, AIR 3 |
釋放與這個物件關聯的所有資源。處置頂點緩衝區後,透過這個物件呼叫 upload() 和顯示都會失敗。
uploadFromByteArray | () | 方法 |
public function uploadFromByteArray(data:ByteArray, byteArrayOffset:int, startVertex:int, numVertices:int):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 11, AIR 3 |
從位元組陣列上傳一組點的資料到顯示內容。
參數
data:ByteArray — 包含頂點資料的位元組陣。每個資料值的長度為 4 個位元組。頂點中的值數目是在緩衝區建立時,使用 Context3D createVertexBuffer3D() 方法的 data32PerVertex 參數所指定。資料長度 (以位元組為單位) 必須為 byteArrayOffset 加上每個頂點之值數目的 4 倍乘以頂點數目。ByteArray 物件必須使用 little endian 格式。
| |
byteArrayOffset:int — 從資料開頭略過的位元組數目
| |
startVertex:int — 要載入的第一個頂點的索引。不等於零的 startVertex 值可用來載入頂點資料的子區域。
| |
numVertices:int — 從 data 載入的頂點數目。
|
擲回值
TypeError — Null 指標錯誤:data 為 null。
| |
RangeError — 輸入大小錯誤:byteArrayOffset 小於 0,或 byteArrayOffset 大於或等於 data 的長度,或者 data 中的元素數目 - byteArrayOffset 小於 Context3D::createVertexBuffer() 中指定的 numVertices *data32pervertex *4。
| |
Error — 3768:在背景執行期間不會使用 Stage3D API。
|
uploadFromVector | () | 方法 |
public function uploadFromVector(data:Vector.<Number>, startVertex:int, numVertices:int):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 11, AIR 3 |
從頂點陣列上傳一組點的資料到顯示內容。
參數
data:Vector.<Number> — 32 位元值的向量。單一向量包含向量中循序儲存的值數目。頂點中的值數目是在緩衝區建立時,使用 Context3D createVertexBuffer3D() 方法的 data32PerVertex 參數所指定。向量的長度必須是每頂點的值數目乘以頂點數目。
| |
startVertex:int — 要載入的第一個頂點的索引。不等於零的 startVertex 值可用來載入頂點資料的子區域。
| |
numVertices:int — 以 data 表示的頂點數目。
|
擲回值
TypeError — Null 指標錯誤:data 為 null。
| |
RangeError — 輸入大小錯誤:data 中的元素數目小於 Context3D::createVertexBuffer() 中指定的 numVertices * data32PerVertex ,或者 startVertex + numVertices 大於 Context3D::createVertexBuffer() 中指定的 numVertices 。
|
setVertexBufferAt()
方法,指定將前三個資料點傳遞給頂點程式,做為 va0 的 3 個浮點值,並傳遞次三個資料點做為 va1。頂點程式 (也稱為頂點屬性暫存器) 最多可有 8 個輸入,定義如下。
const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ // x, y, z r, g, b format 0, 0, 0, 1, 1, 1, -1, 1, 0, 0, 0,.5, 1, 1, 0, 0, 0, 1, 1,-1, 0, .5, 0, 0, -1,-1, 0, 1, 0, 0 ] ); var vertexes:VertexBuffer3D = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //Defines shader input va0 as the position data renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //Defines shader input va1 as the color data
Tue Jun 12 2018, 03:47 PM Z