Não há nenhuma prática recomendada. Tudo varia de acordo com a aplicação que está sendo desenvolvida.
Para o renderizador de jogos, não há necessidade de armazenar vértices na RAM e na VRAM , o que significa que você precisa manter apenas o ID do vbo. Exceção é o terreno em que você precisa ter acesso às posições devido à colocação / colisão do jogador em altura.
Você precisa ter todos os dados de vértice juntos? Se você quiser ter várias cores para os mesmos vértices, como cores diferentes para os mesmos modelos de jogadores, juntar tudo pode causar um pequeno obstáculo ao desenvolvimento.
Você acessa dados fora da classe? Se não, você só terá mais código como em vertices->position[i]
vez de positions[i]
. No designer de jogos / modelos, você precisa acessá-los de fora, mas não está acessando todos os dados ao mesmo tempo em que está modelando, depois acessa posições e, quando está colorindo, acessa cores.
A única coisa que eu colocaria em conjunto é xyz
( rgb
) valores em uma estrutura para um código melhor:
Vector3 {
GLfloat x,y,z;
};
Color3 {
GLbyte r,g,b;
};
Edit: Eu gostaria de acrescentar que algumas pessoas estão usando unions
para facilitar o glVertex * 3v, glVertex * 4v, glUniform * v ... chamando onde a matriz é passada em vez de variáveis separadas:
union Vector3f {
GLfloat v[3];
struct {
GLfloat x,y,z;
};
};
union Color3b {
GLbyte c[3];
struct {
GLbyte r,g,b;
};
};