2 Stimmen

OpenGL ist stur und erlaubt kein Texture Mapping

Ich arbeite an einer Spiele-Engine, die BMP-Texturdateien auf MD3-Modelldateien verwendet. Leider für mich, es funktioniert überhaupt nicht. Ich habe alles versucht, ohne Erfolg. Da ich die Loader selbst geschrieben habe, habe ich sie mir angeschaut und ein paar Fehler behoben, aber trotzdem bekomme ich nur ein grau beleuchtetes Modell.

Hier ist mein Rendering-Code:

void drawmd3(md3& model, GLuint tex)
{
    int i = 0;
    glLoadIdentity();
    glTranslatef(-1.5,0,-24);
    glRotatef(270,0,0,1);
    glRotatef(-90,0,1,0);
    glRotatef(a,0,0,1);
    while(i<model.surfnum)
    {
        glBindTexture(GL_TEXTURE_2D, tex);
        int j = 0;
        while(j<model.surfs.at(i).trinum)
        {
                int tmp = model.surfs.at(i).tris.at(j).indexes[0];
                int tmp1 = model.surfs.at(i).tris.at(j).indexes[1];
                int tmp2 = model.surfs.at(i).tris.at(j).indexes[2];

            float norms[3];
            norms[0] = convert_normals0(model.surfs.at(i).verts.at(tmp).normal);
            norms[1] = convert_normals1(model.surfs.at(i).verts.at(tmp).normal);
            norms[2] = convert_normals2(model.surfs.at(i).verts.at(tmp).normal);
            float norms1[3];
            norms1[0] = convert_normals0(model.surfs.at(i).verts.at(tmp1).normal);
            norms1[1] = convert_normals1(model.surfs.at(i).verts.at(tmp1).normal);
            norms1[2] = convert_normals2(model.surfs.at(i).verts.at(tmp1).normal);
            float norms2[3];
            norms2[0] = convert_normals0(model.surfs.at(i).verts.at(tmp2).normal);
            norms2[1] = convert_normals1(model.surfs.at(i).verts.at(tmp2).normal);
            norms2[2] = convert_normals2(model.surfs.at(i).verts.at(tmp2).normal);

            glBegin(GL_TRIANGLES);

            glNormal3f(norms[0],norms[1],norms[2]);
            glTexCoord2f(model.surfs.at(i).st.at(tmp).st[0],1-model.surfs.at(i).st.at(tmp).st[1]);
            glVertex3f(model.surfs.at(i).verts.at(tmp).coord[0]/64, model.surfs.at(i).verts.at(tmp).coord[1]/64, model.surfs.at(i).verts.at(tmp).coord[2]/64);
            glNormal3f(norms1[0],norms1[1],norms1[2]);
            glTexCoord2f(model.surfs.at(i).st.at(tmp1).st[0],1-model.surfs.at(i).st.at(tmp1).st[1]);
            glVertex3f(model.surfs.at(i).verts.at(tmp1).coord[0]/64, model.surfs.at(i).verts.at(tmp1).coord[1]/64, model.surfs.at(i).verts.at(tmp1).coord[2]/64);
            glNormal3f(norms2[0],norms2[1],norms2[2]);
            glTexCoord2f(model.surfs.at(i).st.at(tmp2).st[0],1-model.surfs.at(i).st.at(tmp2).st[1]);
            glVertex3f(model.surfs.at(i).verts.at(tmp2).coord[0]/64, model.surfs.at(i).verts.at(tmp2).coord[1]/64, model.surfs.at(i).verts.at(tmp2).coord[2]/64);

            glEnd();
            j++;
        }
        glBindTexture(GL_TEXTURE_2D, 0);
        i++;
    }
}

Hier ist mein Init-Code:

glEnable(GL_TEXTURE_2D);

glGenTextures(1,&tex[0]);

glBindTexture(GL_TEXTURE_2D, tex[0]);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, img.img.imgwidth, img.img.imgheight, 0, GL_RGBA8, GL_UNSIGNED_BYTE, img.data);

3voto

datenwolf Punkte 154484

Genau das ist Ihr Problem:

glTexImage2D(GL_TEXTURE_2D, 
             0, 
             GL_RGBA8, 
             img.img.imgwidth, 
             img.img.imgheight, 
             0, 
             GL_RGBA8,    <<<<<<<<<<----------
             GL_UNSIGNED_BYTE, 
             img.data);

Das Token, das Sie für die Format Parameter ist nicht erlaubt. Aus der Referenz:

Format

Gibt das Format der Pixeldaten an. Die folgenden symbolischen Werte werden akzeptiert: GL_COLOR_INDEX, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_BGR, GL_RGBA, GL_BGRA, GL_LUMINANCE, und GL_LUMINANCE_ALPHA.

Es wird also keine Textur geladen und Sie erhalten das Standardweiß einer nicht eingerichteten Textur.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X