Хранение разных атрибутов вершин в разных VBO

Можно ли хранить разные атрибуты вершин в разных буферах вершин?

Все примеры, которые я видел до сих пор, делают что-то вроде этого

float data[] = 
{
//position
   v1x, v1y, v1z,
   v2x, v2y, v2z,
   ...
   vnx, vny, vnz,

//color
   c1r, c1g, c1b,
   c2r, c2g, c2b,
   ...
   cnr, cng, cnb,   
};
GLuint buffname;
glGenBuffers(1, &buffname);
glBindBuffer(GL_ARRAY_BUFFER, buffname);
glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW);

И рисунок выполняется примерно так:

glBindBuffer(GL_ARRAY_BUFFER, buffname);
glEnableVertexAttrib(position_location);
glEnableVertexAttrib(color_location);
glVertexAttribPointer(position_location, 3, GL_FLOAT, GL_FALSE, 0, 0);
glVertexAttribPointer(color_location, 3, GL_FLOAT, GL_FALSE, 0, (void*)(3*n));

glDrawArrays(GL_TRIANGLES, 0, n/3);

glDisableVertexAttrib(position_location);
glDisableVertexAttrib(color_location);
glBindBuffer(GL_ARRAY_BUFFER, 0);

Разве нельзя хранить данные о местоположении и данные о цвете в разных VBO? Проблема в том, что я не понимаю, как это сработает, потому что вы не можете связать два буфера одновременно, не так ли?

Если есть простое, но неэффективное решение, я бы предпочел его более сложному, но эффективному решению, потому что я нахожусь в состоянии начального обучения и не хочу слишком усложнять вещи.

Кроме того, если то, о чем я спрашиваю, возможно, это хорошая идея или нет?

Чтобы уточнить: Я понимаю, как я могу хранить разные атрибуты в разных VBO. Не понимаю, как я их потом нарисую.

8
задан Armen Tsirunyan 28 August 2011 в 20:20
поделиться