パッケージ | flash.display3D |
クラス | public class VertexBuffer3D |
継承 | VertexBuffer3D Object |
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 11, AIR 3 |
VertexBuffer3D オブジェクトを使用して、頂点セットの各ポイントに関連付けられているデータを定義します。ベクトル配列または ByteArray から頂点データをアップロードすることができます(アップロードすると、元の配列のデータは参照されないので、元の配列を変更したり削除したりしても頂点データは変更されません)。
各頂点に関連付けられているデータはアプリケーションで定義される形式で、頂点シェーダープログラム用の入力として使用されます。Context3D の setVertexBufferAt()
関数を使用して、頂点プログラムの入力に属する値を特定します。頂点プログラムでは、最大 8 個の入力(頂点属性レジスタとも呼ばれます)を使用できます。各入力には 1 ~ 4 個の 32 bit 値が必要になります。例えば、頂点の [x,y,z] 位置座標は、3 個の 32 bit 値を含むベクトルとして頂点プログラムに渡されます。Context3DVertexBufferFormat クラスは、シェーダーの入力でサポートされる形式の定数を定義します。各ポイントに対し、最大 64 個の 32 bit 値(256 バイト)のデータを提供できます(ただし、この場合、1 つの頂点シェーダーですべてのデータを使用することはできません)。
また、setVertexBufferAt()
関数も後続の drawTriangles()
呼び出しのレンダリングに使用する頂点バッファーを特定します。別の頂点バッファーのデータをレンダリングするには、該当する引数を使用して、再度 setVertexBufferAt()
を呼び出します(複数の頂点バッファーに同一ポイントのデータを保存できます。例えば、1 つのバッファーに位置データを保存し、別のバッファーにテクスチャ座標を保存できますが、通常、ポイントのすべてのデータが 1 つのバッファーから送信されると、レンダリングが効率的に行われます)。
Context3D の drawTriangles()
メソッドに渡された Index3DBuffer オブジェクトにより、頂点データが整理されて三角形が生成されます。インデックスバッファーのそれぞれの値は、頂点バッファーの頂点に対するインデックスです。一連の 3 つのインデックスで順に 1 つの三角形を定義します。
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 バイト長です。1 つの頂点に含める値の数は、バッファーの作成時に、Context3D の createVertexBuffer3D() メソッドに渡す data32PerVertex パラメーターを使用して指定されます。データのバイト長は、byteArrayOffset + (1 つの頂点に含まれる値の数の 4 倍) x (頂点の数)になる必要があります。ByteArray オブジェクトではリトルエンディアン形式を使用する必要があります。
| |
byteArrayOffset:int — データの先頭からスキップするバイト数。
| |
startVertex:int — 最初にロードする頂点のインデックス。startVertex の値が 0 以外であれば、この値 を頂点データのサブ領域のロードに使用できます。
| |
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 bit 値のベクトル。1 つの頂点は、ベクトルに連続して保存される多くの値から構成されます。1 つの頂点に含める値の数は、バッファーの作成時に、Context3D の createVertexBuffer3D() メソッドに渡す data32PerVertex パラメーターを使用して指定されます。ベクトルの長さは、1 つのベクトルに含まれる値の数に頂点の数を乗じた値になる必要があります。
| |
startVertex:int — 最初にロードする頂点のインデックス。startVertex の値が 0 以外であれば、この値を頂点データのサブ領域のロードに使用できます。
| |
numVertices:int — data によって示される頂点の数。
|
例外
TypeError — Null ポインターエラーです:data が null の場合。
| |
RangeError — 入力サイズが正しくありません:data 内のエレメントの数が Context3D::createVertexBuffer() で指定される numVertices * data32PerVertex よりも小さい、または startVertex + numVertices が Context3D::createVertexBuffer() で指定される numVertices よりも大きい場合。
|
setVertexBufferAt()
メソッドを呼び出して、最初の 3 組のデータポイントが va0 で 3 つの浮動小数点値として頂点プログラムに渡されること、および 2 つ目の 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, 10:34 AM Z