Ich hatte gehofft, Hilfe zu einer OpenGL-Frage bezüglich der Erstellung und Darstellung von VAOs zu bekommen. Das Ziel ist einfach, dies zu nehmen:VAO keine Farben OpenGL?
glBegin(GL_TRIANGLES);
glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
glVertex3f(-0.5f, 0.5f, 0.0f);
glVertex3f(-0.5f, -0.5f, 0.0f);
glVertex3f(0.5f, -0.5f, 0.0f);
glVertex3f(-0.5f, 0.5f, 0.0f);
glVertex3f(0.5f, -0.5f, 0.0f);
glVertex3f(0.5f, 0.5f, 0.0f);
glEnd();
, die in der Mitte des Fensters ein rotes Quadrat macht, und schalten Sie ihn in eine VAO mit Ecken, Farben und Indizes. Nun ist es das, was ich bisher so weit wie das VAO zu schaffen (sorry, wenn dies ein bisschen zu lang für den Code ist):
//initialize all data
verts_amt = 6;
Vertex* verts = (Vertex*)malloc(sizeof(Vertex) * verts_amt);
int* indices = (int*)malloc(sizeof(int) * verts_amt);
verts[0] = createVertex(-0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f);
verts[1] = createVertex(-0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f);
verts[2] = createVertex(0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f);
verts[3] = createVertex(-0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f);
verts[4] = createVertex(0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f);
verts[5] = createVertex(0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f);
int i;
for(i = 0; i < 6; i ++)
indices[i] = i;
unsigned int vbo, ibo;
//create, bind, set data, and then unbind for the vbo and ibo
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, verts_amt * sizeof(Vertex), verts, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glGenBuffers(1, &ibo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, verts_amt * sizeof(int), indices, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
//create vao, bind vao, bind and set data for vbo, bind ibo, then unbind vao
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), NULL);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, r));
glEnableVertexAttribArray(1);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBindVertexArray(0);
, falls Sie sich fragen,, Vertex
ist nur eine Struktur aus sieben schwimmt in der Reihenfolge x, y, z, r, g, b, a
. Nach einem Blick durch ähnliche Fragen zu diesem Thema, ich bin immer noch nicht zu sehen, was mir fehlt und/oder nicht richtig machen, denn wenn ich es mit diesen einfachen Linien machen:
glBindVertexArray(vao);
glDrawElements(GL_TRIANGLES, verts_amt, GL_UNSIGNED_INT, NULL);
es nur eine competey weiß macht Platz. Denken Sie daran, ich ändere nichts anderes über meine Rendering-Schleife, außer natürlich die Vertex3f
, glBegin/glEnd
und Color4f
Anrufe loszuwerden. Ich sollte auch erwähnen, dass ich kein Shader-Programm verwende, ich bin mir nicht ganz sicher, ob sich das hier drastisch ändert. Jede Hilfe dazu wäre sehr willkommen!
Dinge zu tun, die GL3 + Weg benötigt Shader – Alex