Должен ли новый VertexBuffer3D & IndexBuffer3D быть создан для каждой используемой Program3D? - PullRequest
0 голосов
/ 18 января 2012

Если у меня есть несколько Program3D объектов (каждый со своими Vertex-Shader и Fragment-Shader , отвечающий за свою собственную задачу рендеринга), нужно ли создавать экземплярновые 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 для хранения формата A , другой для формат B , и еще один для формат C ?Или можно смешать различные форматы в одном и том же VertexBuffer3D, а затем сделать какое-то умное (или запутанное!) Использование одного IndexBuffer3D для рисования треугольников?

1 Ответ

2 голосов
/ 01 февраля 2012

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

...