Darius Goad
Darius Goad

Reputation: 179

OpenGL being stubborn, not allowing texture mapping

I'm working on a game engine, that uses BMP texture files on MD3 model files. Unfortunately for me, it isn't working at all. I've tried everything, to no avail. Since I wrote the loaders myself, I looked at them, and fixed a few bugs in them, but still, I just get a gray lighted model.

Here's my 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++;
    }
}

Here's my 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);

Upvotes: 2

Views: 142

Answers (1)

datenwolf
datenwolf

Reputation: 162317

That's your problem right there:

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

The token you're using for the format parameter is not allowed. From the reference:

format

Specifies the format of the pixel data. The following symbolic values are accepted: GL_COLOR_INDEX, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_BGR, GL_RGBA, GL_BGRA, GL_LUMINANCE, and GL_LUMINANCE_ALPHA.

Thus no texture will be loaded and you end up with the default white of a not setup texture.

Upvotes: 3

Related Questions