2017-05-10 2 views
0

Ich versuche, zwei separate Objekte zu erstellen, um gleichzeitig gerendert werden, einen Würfel und eine Kugel. Das Problem ist, wenn ich den Code für den Bereich hinzufügen, der Würfel ist, einige Gesichter fehlen usw.Zwei verschiedene Objekte OpenGL. VAO VBO IBO Problem mit Mesh-Verzerrung

Hier ist mein Code:

glGenBuffers(1, &g_VBO); 
    glBindBuffer(GL_ARRAY_BUFFER, g_VBO); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex)*g_numberOfVertices[0], g_pMeshVertices[0], GL_DYNAMIC_DRAW); 

    glGenBuffers(1, &g_IBO); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_IBO); 
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLint) * 3 * g_numberOfFaces[0], g_pMeshIndices[0], GL_DYNAMIC_DRAW); 
    glGenVertexArrays(1, &g_VAO); 

    glBindVertexArray(g_VAO); 
    glBindBuffer(GL_ARRAY_BUFFER, g_VBO); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_IBO); 
    glVertexAttribPointer(positionIndex, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), reinterpret_cast<void*>(offsetof(Vertex, position))); 
    glVertexAttribPointer(normalIndex, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), reinterpret_cast<void*>(offsetof(Vertex, normal))); 

    glEnableVertexAttribArray(positionIndex); 
    glEnableVertexAttribArray(normalIndex); 

    /////////////////////////////////////////ORN/////////////////////////////////////////////// 

    glGenBuffers(1, &ornVBO); 
    glBindBuffer(GL_ARRAY_BUFFER, ornVBO); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex)*g_numberOfVertices[1], g_pMeshVertices[1], GL_DYNAMIC_DRAW); 

    glGenBuffers(1, &ornIBO); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ornIBO); 
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLint) * 3 * g_numberOfFaces[1], g_pMeshIndices[1], GL_DYNAMIC_DRAW); 
    glGenVertexArrays(1, &ornVAO); 

    glBindVertexArray(ornVAO); 
    glBindBuffer(GL_ARRAY_BUFFER, ornVBO); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ornIBO); 
    glVertexAttribPointer(positionIndex, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), reinterpret_cast<void*>(offsetof(Vertex, position))); 
    glVertexAttribPointer(normalIndex, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), reinterpret_cast<void*>(offsetof(Vertex, normal))); 

    glEnableVertexAttribArray(positionIndex); 
    glEnableVertexAttribArray(normalIndex); 

So macht es die Kugel in Ordnung, aber dann alle Würfel haben fehlende Dreiecksflächen. Ich glaube, ich habe mich darauf beschränkt, ein Problem mit der IBO-Seite zu sein, aber ich kann es nicht genau herausfinden. Hier

ist das Bild: https://puu.sh/vLBSm/1617b5d996.png

neben und hinter der Kugel und dem Würfel sind andere Würfel diejenigen ignorieren, sie haben das gleiche Problem aber sind gezielt dort. Ich kann einfach nicht herausfinden, wie man beides richtig anzeigt. und ich bin sicher, es hat etwas damit zu tun:

glGenBuffers(1, &ornIBO); 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ornIBO); 
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLint) * 3 * g_numberOfFaces[1], g_pMeshIndices[1], GL_DYNAMIC_DRAW); 
glGenVertexArrays(1, &ornVAO); 

Antwort

0

Im ORN-Code, Sie overwritting den Indexpuffer des ersten VAO verbindlich.

An diesem Punkt:

glGenBuffers(1, &ornIBO); 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ornIBO); 

g_VAO noch aktiv ist, so dass der Index-Puffer durch ornIBO ersetzt ist bindend. Um das zu lösen, sollten Sie g_VAO vor dem Starten des ORN-Codes lösen:

+0

Vielen Dank, dass es war. Eigentlich hatte ich das ursprünglich am Ende des Orn-Codes. Ich habe meinen Fehler nicht bemerkt. Das funktioniert – CryptiK

Verwandte Themen