2012-01-18 91 views
0

如果我有幾個Program3D對象(每個都有它自己的頂點着色器片段着色器負責它自己的渲染任務),我需要實例化一個新的VertexBuffer3DIndexBuffer3D讓他們只存儲數據與其對應的頂點數據格式相關的Program3D應該爲每個使用的Program3D創建一個新的VertexBuffer3D&IndexBuffer3D嗎?

例如,如果我打算來定義不同的頂點數據格式四邊形,如:

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 
]; 

我會需要創建一個VertexBuffer3DIndexBuffer3D存儲格式中的,另一一個用於格式B,還有一個用於格式C?或者可以將各種格式混合在同一個VertexBuffer3D之內,然後使用一個單一的IndexBuffer3D來繪製三角形(或混淆!)?

回答

2

您可以自由混搭。想想一個需要所有輸入的頂點程序。來自哪裏的是使用setVertexBufferAt完成的。它可以來自不同的緩衝區,甚至可以來自相同的位置。就像連接一些電線一樣。索引緩衝區只是在頂點緩衝區中跳轉。您可以並應該儘可能重複使用它們。

相關問題