OpenGL упрямый, не допускающий наложение текстур - PullRequest
2 голосов
/ 17 декабря 2011

Я работаю над игровым движком, который использует файлы текстур BMP в файлах моделей MD3. К сожалению для меня, это не работает вообще. Я перепробовал все, но безрезультатно. Поскольку я сам писал загрузчики, я смотрел на них и исправлял в них несколько ошибок, но, тем не менее, я просто получаю модель с серой подсветкой.

Вот мой код рендеринга:

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++;
    }
}

Вот мой код инициализации:

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);

1 Ответ

3 голосов
/ 17 декабря 2011

Вот твоя проблема:

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

Токен, который вы используете для параметра format , недопустим. Из справки:

Формат

Определяет формат данных пикселей. Допустимы следующие символические значения: GL_COLOR_INDEX, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_BGR, GL_RGBA, GL_BGRA, GL_LUMINANCE и GL_LUMINANCE_ALPHA.

Таким образом, никакая текстура не будет загружена, и в результате вы получите белый цвет по умолчанию для неустановленной текстуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...