Должен ли новый 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. Он может прийти из другого буфера, он может прийти даже из одного места. Так же, как подключение некоторых проводов. Индексные буферы просто перепрыгивают в вершинные буферы. Вы можете и должны использовать их как можно чаще.