2012-01-18 9 views
0

私はいくつかのProgram3Dオブジェクト(それ自身の頂点シェーダフラグメントシェーダでそれぞれそれ自身のレンダリングタスクを担当する)を持っている場合、彼らはデータのみを保存するように、私は新しいVertexBuffer3Dをインスタンス化する必要があるとIndexBuffer3Dん対応するProgram3Dによって使用される頂点データ形式に関連していますか?例えば新しいVertexBuffer3D&IndexBuffer3Dを使用する各Program3Dに対して作成する必要がありますか?

、Iのような、異なる頂点データフォーマットでクワッドを定義するために計画していた場合:

var vertexData:Vector.<Number>; 

//Vertex-Format A: 
vertexData = new <Number>[ 
    //X, Y, U, V 
    -.5, -.5, 0, 0, 
    .5, -.5, 1, 0, 
    .5, .5, 1, 1, 
    -.5, .5, 0, 1 
]; 

//Vertex-Format B: 
vertexData = new <Number>[ 
    //X, Y, U, V, Matrix-Constant ID, Color 
    -.5, -.5, 0, 0, 3, 0xff0000, 
    .5, -.5, 1, 0 , 3, 0x00ff00, 
    .5, .5, 1, 1, 3, 0x0000ff, 
    -.5, .5, 0, 1, 3, 0xffff00 
]; 

//Vertex-Format C: 
vertexData = new <Number>[ 
    //X, Y, Matrix-Constant ID 
    -.5, -.5, 3, 
    .5, -.5, 3, 
    .5, .5, 3, 
    -.5, .5, 3 
]; 

IはフォーマットA、別を記憶するための1つVertexBuffer3DIndexBuffer3Dを作成する必要がありますフォーマットB、さらにもう1つはフォーマットCです。あるいは、さまざまな形式を同じVertexBuffer3Dの中に混ぜて、IndexBuffer3Dという単一のものを使って三角形を描くのは、巧妙な(または混乱を招く)ものでしょうか?

答えて

2

自由に組み合わせてマッチさせることができます。すべての入力が何かにつながっている頂点プログラムを考えてみましょう。それがどこから来ているかは、setVertexBufferAtを使って行います。それは別のバッファから来ることができます、それは同じ場所から来ることができます。ちょうどいくつかのワイヤを接続するように。インデックスバッファは頂点バッファ内をジャンプするだけです。できるだけそれらを再利用することができます。

関連する問題