Seite 1 von 1

[SOLVED] OpenGL AssImp & glDrawElements

Verfasst: 17.03.2011, 20:22
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

Re: OpenGL AssImp & glDrawElements

Verfasst: 17.03.2011, 23:02
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 :(

Re: OpenGL AssImp & glDrawElements

Verfasst: 17.03.2011, 23:28
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];
        }
    }