[Gelöst][OpenGL]Probleme beim Rendern des VertexArrays/Displayliste (glError 1280)



  • Hallo,

    ich lade ein Model aus einem .obj File und will es nun Darstellen.
    über glBegin/glEnd Funktioniert alles Reibungslos.
    v=vertices, i=indices.

    glBegin(GL_TRIANGLES);
            glColor3f(1,0,0);
            //für jedes Dreieck
            for(int t=0; t<indices.size()/3; t++)
            {
                //für jede Ecke des Dreieckes
                for(int f=0; f<3; f++)
                {
                    int index=i[f+t*3]*3;
                    glVertex3f(v[index],v[index+1],v[index+2]);
                }
    
            }
            glEnd();
    

    Da aber glBegin/glEnd die langsamste Methode sein soll um etwas zu zeichen habe ich es mit Vertex Arrays in Verbindung mit einer Displayliste versucht.

    siehe:

    GLfloat *v=&vertices[0];
        GLint *i=&indices[0];
        hawk = glGenLists(1);
    
        glNewList(hawk, GL_COMPILE);
        glEnableClientState(GL_VERTEX_ARRAY);
        glPushMatrix();
        glVertexPointer(3, GL_FLOAT, 0, v);
        glDrawElements(GL_TRIANGLES, indices.size(), GL_INT, i); //Error 1280
        //glDrawArrays(GL_TRIANGLES,0,36);
        glPopMatrix();
        glDisableClientState(GL_VERTEX_ARRAY);
        glEndList();
    

    bei dem erstellen der Liste wird jedoch der Fehler 1280(Invalid enum) von OpenGL geworfen (wahrscheinlich durch glDrawElements). Ich hatte auch schon früher mit Vertex Arrays und Displaylisten gearbeitet ohne Probleme. Bei glDrawArrays (glDrawElements auskommentiert) wird zwar etwas gezeichnet und die Form meines Models scheint erkennbar, jedoch sind meine vertices nicht sortiert und somit werden die Dreiecke falsch zusammengesetzt.

    vielen Dank im voraus!

    MfG

    Cyprhon



  • Nachtrag:

    Ich habe bei glDrawElement GLint auf GLubyte geändert sowie auch die indices.
    Jetzt wird zwar mein Model gerendert, jedoch wird von OpenGL nun der Fehler 1283(stack overflow) geworfen. Ich kann mir jedoch nicht vorstellen wo genau der stack overflow herkommen soll.

    Ich dachte erst das der Datentyp GLubyte zu klein sei jedoch ergibt indices.size()=252(Durch 3=84 Flächen und vertices=129/3=43 Punkte). Auch bei Gluint tritt der Fehler auch auf.



  • ok habe das Problem gelößt.

    glPopMatrix(); und glPushMatrix() gehören nicht rein!

    glError 1283 hatte mich ein bischen in die irre geführt.


Anmelden zum Antworten