¿Es posible almacenar atributos de vértice diferentes en diferentes búferes de vértices?Almacenar diferentes atributos de vértice en diferentes VBO
Todos los ejemplos que he visto hasta ahora hacen algo como esto
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);
Y el dibujo se hace algo como esto:
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);
¿No es posible almacenar datos de posición y datos de color en diferentes VBO? El problema es que no entiendo cómo funcionaría esto porque no puedes unir dos búferes a la vez, ¿o sí?
Si hay una solución simple pero ineficiente, preferiría una solución más complicada pero eficiente porque estoy en el estado de aprendizaje primario y no quiero complicar demasiado las cosas.
Además, si lo que estoy preguntando es posible, ¿es una buena idea o no?
Para aclarar: entiendo cómo podría almacenar diferentes atributos en diferentes VBO de. No entiendo cómo los dibujaré más tarde.
¡Muchas gracias! ¡Entiendo!Mucho más se hizo de repente más claro :))) ¿Qué pasa con mi segunda pregunta? ¿Se considera generalmente una buena idea o no? –
@Armen: ver mi edición. –
Lo veo mucho más claro ahora. Muchas gracias. Entonces, en casos simples deberíamos usar el primer enfoque mencionado por Nicol, y si es necesario, usamos VBO diferentes. ¡Mucho más claro gracias! –