Quelle est la meilleure pratique en matière de stockage des données de sommet dans Open GL? C'est à dire:
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 les avoir stockés séparément dans la classe requise comme:
class Terrian {
private:
GLfloat vertices[];
GLfloat normals[];
GLfloat colors[];
GLuint vbo_vertices;
GLuint vbo_normals;
GLuint vbo_colors;
GLuint ibo_elements;
}
Réponses:
Il n'y a pas de meilleure pratique. Tout varie selon l'application en cours de développement.
Pour le rendu de jeu, il n'est pas nécessaire de stocker les sommets dans la RAM et la VRAM , ce qui signifie que vous devez conserver uniquement l'ID vbo. L'exception est le terrain où vous devez avoir accès à des positions en raison du placement / des collisions des joueurs en hauteur.
Avez-vous besoin d'avoir toutes les données de sommet ensemble? Si vous voulez avoir plusieurs couleurs pour les mêmes sommets comme des couleurs différentes pour les mêmes modèles de joueurs, tout mettre ensemble peut causer peu d'obstacles au développement.
Accédez-vous aux données en dehors de la classe? Si non, vous ne vous retrouverez qu'avec plus de code comme
vertices->position[i]
au lieu depositions[i]
. Dans le concepteur de jeu / modèle, vous devez y accéder de l'extérieur, mais vous n'accédez pas à toutes les données en même temps lorsque vous modélisez, vous accédez à des positions et lorsque vous coloriez, vous accédez à des couleurs.La seule chose que je mettrais ensemble est
xyz
(rgb
) les valeurs dans une structure pour un code plus agréable:Edit: Je voudrais ajouter que certaines personnes utilisent
unions
plus facilement glVertex * 3v, glVertex * 4v, glUniform * v ... en appelant où le tableau est passé au lieu de variables séparées:la source