2016-10-30 3 views
0

UPDATE: Nach weiteren Untersuchungen scheint es, das Programm zu wechseln, das bewirkt, dass das 2. Objekt nicht gezeichnet wird. Ich weiß nicht warum. Beide Objekte verwenden im Wesentlichen die gleiche GLSL.Mehrere Objekte mit glDrawArrays zeichnen

Ich habe eine Ahnung, ich benutze keine Puffer richtig. Ich habe einen Würfel und ein Prisma definiert. Wenn ich den Zeichenaufruf des Prismas auszeichne, zeichnet der Würfel. ansonsten zeichnet nur das Prisma. Was bin ich hier

Draw-Code:

glUseProgram(cubeProgram); 
glBindBuffer(GL_ARRAY_BUFFER, vertexArrayBuffers[0]); 

glVertexAttribPointer(cVPos, 4, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0)); 

glEnableVertexAttribArray(cVPos); 

glBindBuffer(GL_ARRAY_BUFFER, vertexArrayBuffers[1]); 
glVertexAttribPointer(cNormID, 4, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0)); 
glEnableVertexAttribArray(cNormID); 

glDrawArrays(GL_TRIANGLES, 0, 36); 

glUseProgram(priProgram); 

glBindBuffer(GL_ARRAY_BUFFER, vertexArrayBuffers[2]); 

glVertexAttribPointer(pVPos, 4, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0)); 

glEnableVertexAttribArray(pVPos); 

glBindBuffer(GL_ARRAY_BUFFER, vertexArrayBuffers[3]); 
glVertexAttribPointer(pNormID, 4, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0)); 
glEnableVertexAttribArray(pNormID); 

glDrawArrays(GL_TRIANGLES, 0, 64); 

VBO Creation:

glGenBuffers(4, vertexArrayBuffers); 

glBindBuffer(GL_ARRAY_BUFFER, vertexArrayBuffers[0]); 
glBufferData(GL_ARRAY_BUFFER, sizeof(cubeVerts), cubeVerts, GL_STATIC_DRAW); 
glBindBuffer(GL_ARRAY_BUFFER, vertexArrayBuffers[1]); 
glBufferData(GL_ARRAY_BUFFER, sizeof(cubeNorms), cubeNorms, GL_STATIC_DRAW); 


glBindBuffer(GL_ARRAY_BUFFER, vertexArrayBuffers[2]); 

glBufferData(GL_ARRAY_BUFFER, sizeof(priVerts), priVerts, GL_STATIC_DRAW); 

glBindBuffer(GL_ARRAY_BUFFER, vertexArrayBuffers[3]); 
glBufferData(GL_ARRAY_BUFFER, sizeof(priNorms), priNorms, GL_STATIC_DRAW); 

Lassen Sie mich wissen, wenn es mehr Code erforderlich ist.

Antwort

0

So war es meine GLSL verursacht das Problem. Ich habe eine Funktion aufgerufen, um Variablen für den Shader zu setzen, und einer davon scheint nicht gesetzt zu sein. Ich erinnerte mich an die Funktion nach dem Zeichnen des ersten Objekts und beide zeichnen. Hurra!