Должен ли новый VertexBuffer3D & IndexBuffer3D быть создан для каждой используемой Program3D?

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

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

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 ответ

Решение

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

Другие вопросы по тегам