2016-03-21 15 views
-1

Ich habe einen Beispielcode, der einen VBO mit einem Dreieck initialisiert und dann rendert.Sollte es Verhalten Verhalten für VBO vs unmittelbaren Modus (glBegin/glEnd) geben?

Mein Haupt rendering loop ist:

// Clear Color and Depth Buffers 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
// Reset transformations 
glLoadIdentity(); 
// Set the camera 
gluLookAt( x, 1.0f, z, 
      x+lx, 1.0f, z+lz, 
      0.0f, 1.0f, 0.0f); 
// Draw ground 
glColor3f(0.9f, 0.9f, 0.9f); 
glBegin(GL_QUADS); 
    glVertex3f(-100.0f, 0.0f, -100.0f); 
    glVertex3f(-100.0f, 0.0f, 100.0f); 
    glVertex3f(100.0f, 0.0f, 100.0f); 
    glVertex3f(100.0f, 0.0f, -100.0f); 
glEnd(); 
// draw triangle 
glColor3f(0.9f, 0.2f, 0.1f); 
glRotatef(angle, 0.0f, 1.0f, 0.0f); 
if(vboTest) vboTest->draw(); 
/* The above ->draw() would be equivalent 
to the following immediate mode 
glBegin(GL_TRIANGLES); 
    glVertex3f(-1.0f, 0.2f, -1.0f); 
    glVertex3f(-1.0f, 0.2f, 1.0f); 
    glVertex3f(1.0f, 0.2f, 1.0f); 
glEnd();*/ 

Die enthaltenen Daten in vboTest wird oben mit genau den gleichen Werten wie der kommentierten Code initialisiert, aber dann, wenn I mache es mit dem Code folgenden

// bind vertexes and indexes 
glBindBuffer(GL_ARRAY_BUFFER, vbos_[0]); // vertexes 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbos_[2]); // indexes 
// do same as vertex array except pointer 
glEnableClientState(GL_VERTEX_ARRAY); // activate vertex coords array 
glVertexPointer(3, GL_FLOAT, 0, 0); // last param is offset, not ptr 
// draw n_tris_ triangles using offset of index array 
glDrawElements(GL_TRIANGLES, n_vertex_, GL_UNSIGNED_INT, 0); 
// deactivate vertex array 
glDisableClientState(GL_VERTEX_ARRAY);    
// bind with 0, so, switch back to normal pointer operation 
glBindBuffer(GL_ARRAY_BUFFER, 0); 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 

Das Dreieck scheint sich zu drehen, ist aber verformt während des Spinnens.
Natürlich, wenn ich den sofortigen Modus Code oben verwenden soll, kann ich ein spinnendes Dreieck ohne Probleme sehen.

Soll VBO sich nicht semantisch gleichwertig verhalten sofort mode? Was mache ich falsch?

Antwort

1

Ich habe das Problem gefunden!

Überraschenderweise fehlte mir bei Vertex-Deklarationen ein Komma. Ich kann es nicht glauben:

GLfloat v[] = { -1.0f, 0.2f, -1.0f // comma missing here! 
       -1.0f, 0.2f, 1.0f, 
       1.0f, 0.2f, 1.0f }; 

fast die gleiche wie this question.
Ich bin sprachlos!

Cheers,
E