[SOLVED] OpenGL AssImp & glDrawElements

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
maxx2097
Beiträge: 22
Registriert: 15.03.2011, 18:37

[SOLVED] OpenGL AssImp & glDrawElements

Beitrag von maxx2097 »

Irgendwie stell ich mich grad zu doof an... evtl. kann mir ja hier jemand meinen Fehler aufzeigen:

Ich habe in einem iPhone Projekt (GL ES 2.0!) per AssImp ein simples Objekt (Würfel mit trippeled Polygons) geladen und versuche nun das mal ganz simpel zu rendern. Das betreffende Mesh wird anscheinend auch korrekt geladen (sichtbar im Debugger), aber wenn ich versuche das mit glDrawElements zu malen funktioniert das leider nicht:

Code: Alles auswählen

        // Draw first mesh of AssImp Scene
        const struct aiMesh* mesh = scene->mMeshes[0];
        
        glVertexAttribPointer(ATTRIB_VERTEX, 3, GL_FLOAT, 0, 0, mesh->mVertices);
        glEnable(GL_VERTEX_ARRAY);
        glEnableVertexAttribArray(ATTRIB_VERTEX);
        
        GLuint* indices = malloc(sizeof(GLuint) * mesh->mNumFaces * 3);
        for (unsigned int x = 0; x < mesh->mNumFaces; ++x)
        {
            for (unsigned int a = 0; a < 3; ++a)
            {
                
                *indices++ = mesh->mFaces[x].mIndices[a];
            }
        }

        
        //glDrawArrays(GL_TRIANGLE_STRIP, 0, mesh->mNumFaces*3);
        glDrawElements(GL_TRIANGLES, mesh->mNumFaces * 3, GL_UNSIGNED_INT, indices);
Der auskommentierte Aufruf von glDrawArrays zeichnet übrigens zumindest etwas (ist natürlich ein ziemlich wirrer Polygonhaufen).

Dankbar für eure Hilfe...

Maxx
Zuletzt geändert von maxx2097 am 18.03.2011, 00:18, insgesamt 1-mal geändert.
maxx2097
Beiträge: 22
Registriert: 15.03.2011, 18:37

Re: OpenGL AssImp & glDrawElements

Beitrag von maxx2097 »

Hmm... wer lesen kann ist klar im Vorteil ;)

"GL_UNSIGNED_INT as type of glDrawElements indices array is not allowed on iPhone"

Mit GL_UNSIGNED_SHORT malt er auch schon mal was... allerdings eher ein wirrer Haufen :(
maxx2097
Beiträge: 22
Registriert: 15.03.2011, 18:37

Re: OpenGL AssImp & glDrawElements

Beitrag von maxx2097 »

OK... Problem erstmal gelöst... es sieht jetzt gut aus... meine Indices waren falsch... so klappt es:

Code: Alles auswählen

indices = (GLushort *)malloc(sizeof(GLushort) * mesh->mNumFaces * 3);
    for (unsigned int x = 0; x < mesh->mNumFaces; ++x)
    {
        for (unsigned int a = 0; a < 3; ++a)
        {
            
            indices[x*3+a] = (GLushort)mesh->mFaces[x].mIndices[a];
        }
    }

Antworten