2016-07-21 7 views
0

In einer C++ - Anwendung, die ich schreibe Ich versuche, ein Quad mit einem EBO (Element-Puffer-Objekt) zu zeichnen. Immer wenn ich es versuche, kann ich den Quad nicht zum Zeichnen bringen. Was mache ich falsch? Code:Kann nicht Dinge mit EBOs zeichnen

//vertices and indices 
GLfloat vertices[]={ 
//position    texture coordinate 
-0.005f,0.02f,0.0f,  0.0f,1.0f, 
0.02f,0.02f,0.0f,  1.0f,1.0f, 
0.02f,-0.02f,0.0f,  1.0f,0.0f, 
-0.005f,-0.02f,0.0f,  0.0f,0.0f, 
}; 

GLfloat indices[]={ 
0,1,3, 
2,3,1 
}; 
//initialization 
glCreateVertexArrays(1,&VAO); 
glBindVertexArray(VAO); 
glCreateBuffers(1,&VBO); 
glCreateBuffers(1,&EBO); 
glBindBuffer(GL_ARRAY_BUFFER,VBO); 
glBufferData(GL_ARRAY_BUFFER,sizeof(vertices),vertices,GL_STATIC_DRAW); 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,EBO); 
glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(indices),indices,GL_STATIC_DRAW); 
glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,5*sizeof(GLfloat),(GLvoid*)nullptr); 
glEnableVertexAttribArray(0); 
glVertexAttribPointer(1,2,GL_FLOAT,GL_FALSE,5*sizeof(GLfloat),(GLvoid*)(3*sizeof(GLfloat))); 
glEnableVertexAttribArray(1); 
glBindVertexArray(0); 

//drawing commands 
transformLocation=glGetUniformLocation(textureProgram,"transform"); 
glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D,woodTexture); 
glUseProgram(textureProgram); 
glUniformMatrix4fv(transformLocation,1,GL_FALSE,glm::value_ptr(transform)); 
glBindVertexArray(bowHandleVAO); 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,bowHandleEBO); 
glDrawElements(GL_TRIANGLES,6,GL_UNSIGNED_INT,nullptr); 

Dies funktioniert mit dem glDrawArrays dazu gleichwertig, aber wenn ich versuche, EBO zu verwenden, es wird nicht alles zeichnen. Kommentar, wenn Sie mehr Informationen benötigen.

Antwort

0

Die unmittelbarste Fehler, die ich sehen kann, ist ein Typenkonflikt zwischen Indizes Definitionen und Verwendung bei Aufruf glDrawElements

Vorschlag: ändern GLfloat zu GLuint, dh definieren Sie Ihre Indizes:

GLuint indices[]={ //... 
0

Zusätzlich zu dem, was Amadeus über das Ändern Ihres Indexarrays von Float nach GLuint sagt, scheinen Sie den falschen VAO und EBO zu verwenden. In dem Code, den Sie uns zeigen, puffern Sie alle Ihre Daten in ein Pufferobjekt in VAO und Indizes zu EBO, aber dann, wenn Sie versuchen zu zeichnen, zeichnen Sie mit bowHandleVAO und bowHandleEBO.

Verwandte Themen