Es gibt keine Best Practice. Alles variiert je nach Anwendung, die entwickelt wird.
Für Spiel Renderer gibt es keine Notwendigkeit zum Speichern von Eckpunkten in RAM- und VRAM , das bedeutet , Sie nur vbo id halten müssen. Ausnahme ist Gelände, in dem Sie aufgrund der Platzierung / Kollisionen von Höhenspielern Zugriff auf Positionen benötigen .
Müssen Sie alle Scheitelpunktdaten zusammen haben? Wenn Sie mehrere Farben für dieselben Scheitelpunkte wie unterschiedliche Farben für dieselben Spielermodelle haben möchten, kann das Zusammenfügen aller Elemente kaum Entwicklungshemmnisse verursachen.
Greifen Sie außerhalb des Unterrichts auf Daten zu? Wenn nein, erhalten Sie nur mehr Code wie vertices->position[i]
statt positions[i]
. Im Spiel- / Modelldesigner müssen Sie von außen darauf zugreifen, aber Sie greifen nicht auf alle Daten gleichzeitig zu, wenn Sie modellieren, dann greifen Sie auf Positionen zu, und wenn Sie färben, greifen Sie auf Farben zu.
Das einzige, was ich zusammenstellen würde, sind xyz
( rgb
) Werte in einer Struktur für schöneren Code:
Vector3 {
GLfloat x,y,z;
};
Color3 {
GLbyte r,g,b;
};
Bearbeiten: Ich möchte hinzufügen, dass einige Leute unions
für einfachere glVertex * 3v, glVertex * 4v, glUniform * v ... verwenden, wo Array anstelle von getrennten Variablen übergeben wird:
union Vector3f {
GLfloat v[3];
struct {
GLfloat x,y,z;
};
};
union Color3b {
GLbyte c[3];
struct {
GLbyte r,g,b;
};
};