[OpenGL] Farbige Vertices in Vertex Buffer
-
Hallo!
Ich lerne momentan OpenGL und bin gerade dabei n bisschen mit den Vertex Buffern (GL_ARB_vertex_buffer_object) rumzuexperimentieren.
Folgenden Code benutze ich um meinen Buffer zu erstellen:PFNGLBINDBUFFERARBPROC glBindBufferARB = NULL; PFNGLGENBUFFERSARBPROC glGenBuffersARB = NULL; PFNGLBUFFERDATAARBPROC glBufferDataARB = NULL; PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB = NULL; glBindBufferARB = (PFNGLBINDBUFFERARBPROC) wglGetProcAddress("glBindBufferARB"); glGenBuffersARB = (PFNGLGENBUFFERSARBPROC) wglGetProcAddress("glGenBuffersARB"); glBufferDataARB = (PFNGLBUFFERDATAARBPROC) wglGetProcAddress("glBufferDataARB"); glGetBufferParameterivARB = (PFNGLGETBUFFERPARAMETERIVARBPROC)wglGetProcAddress("glGetBufferParameterivARB"); GLfloat data[] = { -1.0f, 1.0f, 0.0f, -1.0f, -1.0f, 0.0f, 1.0f, -1.0f, 0.0f }; GLuint buffer = 0; glGenBuffersARB(1, &buffer); glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffer); glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(data), data, GL_STATIC_DRAW_ARB);
Und zum Rendern:
glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffer); glVertexPointer(3, GL_FLOAT, 0, 0); glEnableClientState(GL_VERTEX_ARRAY); glDrawArrays(GL_TRIANGLE_STRIP, 0, 3);
Funktioniert auch alles Sahne... Nun würd' ich den einzelnen VertexBuffern aber auch gern noch n bissl Farbe verpassen. Kann mir jemand nen Tip (oder den Source) geben, wie man das macht?
Freue mich über Antworten.
-
Nimm einfach ein "interleaved Vertexformat".
Was ich damit sagen will, baue den data array folgendermaßen auf:[position vertex #1 (3 floats)][farbe vertex #1 (4 floats)]
[position vertex #2 (3 floats)][farbe vertex #2 (4 floats)] etcDie Pointer setzt du dann so:
#define BUFFER_OFFSET(i) ((char *)NULL + (i)) const uint VERTEX_SIZE = sizeof(float) * 7; glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); glVertexPointer(3, GL_FLOAT, VERTEX_SIZE, BUFFER_OFFSET(0)); glColorPointer(4, GL_FLOAT, VERTEX_SIZE, BUFFER_OFFSET(3 * sizeof(float)) ); glDrawArrays(GL_TRIANGLE_STRIP, 0, 3);
Edit - Codetags vergessen
-
Vielen Dank, hat mir sehr geholfen!
Jetzt funktioniert alles :).Aber eine Frage hab ich noch: Kennt jemand irgendeine Seite, wo die OpenGL(-Extension) Funktionen erklärt werden? Ich hab zum Beispiel nix gefunden, wo steht, was genau "glGenBuffersARB" oder "glBindBufferARB" macht.
-
Da gibts die Extensionregistry von SGI, da ist jede Extension genau erklärt.
Zwar alles recht technische Texte, aber wenn man sich dran gewöhnt hat liest man sowas zum FrühstückAnsonsten noch die OpenGL-Spezifikation. Da GL_vertex_buffer_object mittlerweise im Core aufgenommen wurde findet man auch gute Infos.
Beides ist auf opengl.org zu finden.
Ansonsten kannst du auch warten bis jemand ne Demo zu dem Thema macht und den Source veröffentlicht.
www.humus.ca
www.frustum.org
-
Kane schrieb:
Da gibts die Extensionregistry von SGI, da ist jede Extension genau erklärt.
Zwar alles recht technische Texte, aber wenn man sich dran gewöhnt hat liest man sowas zum FrühstückAnsonsten noch die OpenGL-Spezifikation. Da GL_vertex_buffer_object mittlerweise im Core aufgenommen wurde findet man auch gute Infos.
Beides ist auf opengl.org zu finden.
Joa, da hab ich (auf SGI und OGL.org) auch schon gesucht, aber nix zu den beiden Funktionen gefunden. Vielleicht stell ich mich auch gerade nur etwas blöd an...
Und bedeutet dass der Vertex Buffer nun Teil des OGL Standards ist, dass ich meinen Code ändern muss(sollte)? Oder ist das nur ein "interne" Änderung?
-
Und bedeutet dass der Vertex Buffer nun Teil des OGL Standards ist, dass ich meinen Code ändern muss(sollte)? Oder ist das nur ein "interne" Änderung?
Für dich ändert sich nichts. Das Feature ist halt nur bei einer bestimmten OpenGL-Version garantiert vorhanden, das ist alles.
Die Extension kann allerdings auch auf Treiber mit einer kleineren Versionsnummer unterstützt werden weshalb du eigentlich immer nur die Extension lädst.
Nein mir ging es nur darum dass die VBOs in der OpenGL-Spezifikation gut dokumentiert sind.http://oss.sgi.com/projects/ogl-sample/registry/ARB/vertex_buffer_object.txt VBO Spec.
-
Ich hab mir den Link von SGI grad nochmal genauer angeschaut. Vorher hab ich immer nur per strg+f nach glGenBuffersARB gesucht und nichts gefunden. Jetzt seh' ich aber dass die Funktionsnamen da ohne das Präfix "gl" drin stehen...
Naja, auf jeden Fall nochmal ein grosses Dank für deine Hilfe. Hab jetzt wirklich nen einigermassen guten Überblick über OpenGL gekriegt.