2012-01-18 5 views
0

Если у меня есть несколько Program3D объектов (каждый с его собственным Vertex-шейдеры и Фрагмент-Shader ответственности за его собственную задачу рендеринга), мне нужно, чтобы создать экземпляр нового VertexBuffer3D и IndexBuffer3D так, что они хранят данные только относящиеся к формату вершинных данных, используемому их соответствующими Program3D?Должен ли создаваться новый VertexBuffer3D & IndexBuffer3D для каждого используемого Program3D?

Например, если я планировал определить Обучение танцев в различных форматах вершинных данных, такие как:

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

мне нужно создать один VertexBuffer3D и IndexBuffer3D для хранения формата А, другие один для формат B, и еще один для формат C? Или различные форматы могут быть смешаны внутри одного и того же VertexBuffer3D, а затем сделать некоторые умные (или запутывающие!) Использование одного IndexBuffer3D для рисования треугольников?

ответ

2

Вы можете свободно смешивать и сочетать. Подумайте о программе вершин, в которой все входы подключены к чему-то. Где это происходит, выполняется с помощью setVertexBufferAt. Он может поступать из разных буферов, он может поступать даже из одного и того же места. Так же, как подключение некоторых проводов. Буферы индексирования просто перескакивают в буферах вершин. Вы можете и должны использовать их как можно больше.