Was ist die beste Vorgehensweise zum Speichern von Scheitelpunktdaten in Open GL? Dh:
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[];
}
oder sie separat in der erforderlichen Klasse speichern lassen wie:
class Terrian {
private:
GLfloat vertices[];
GLfloat normals[];
GLfloat colors[];
GLuint vbo_vertices;
GLuint vbo_normals;
GLuint vbo_colors;
GLuint ibo_elements;
}
Antworten:
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]
stattpositions[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: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:quelle