Qual é a melhor prática em relação ao armazenamento de dados de vértices no Open GL? Ou seja:
struct VertexColored {
public:
GLfloat position[];
GLfloat normal[];
byte colours[];
}
class Terrian {
private:
GLuint vbo_vertices;
GLuint vbo_normals;
GLuint vbo_colors;
GLuint ibo_elements;
VertexColored vertices[];
}
ou armazená-los separadamente na classe necessária, como:
class Terrian {
private:
GLfloat vertices[];
GLfloat normals[];
GLfloat colors[];
GLuint vbo_vertices;
GLuint vbo_normals;
GLuint vbo_colors;
GLuint ibo_elements;
}
Respostas:
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 depositions[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: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:fonte