Проблемы с OpenGL mipmap - PullRequest
       59

Проблемы с OpenGL mipmap

1 голос
/ 02 декабря 2011

Мипмаппинг работает нормально. Но по какой-то причине после того, как я применил текстуру, все другие объекты в моем приложении приобретают, как кажется, средний цвет текстуры. Даже HUD. Есть ли что-то, что мне нужно учитывать? Вот код:

GLuint LoadTexture( const char * filename, int width, int height )
{
    GLuint texture;
    unsigned char * data;
    FILE * file;

    file = fopen( filename, "rb" );
    if ( file == NULL ) return 0;
    data = (unsigned char *)malloc( width * height * 3 );
    fread( data, width * height * 3, 1, file );
    fclose( file );

    glGenTextures( 1, &texture );
    glBindTexture( GL_TEXTURE_2D, texture );
    glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );

    glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR );
    glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR );

    glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
    glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );

    gluBuild2DMipmaps( GL_TEXTURE_2D, 3, width, height, GL_RGB, GL_UNSIGNED_BYTE, data ); 
    free( data );
    return texture;
}

Это вызывается перед циклом и освобождается после слов. Следующая часть кода происходит внутри моего цикла while. Он вызывается перед всеми другими объектами в сцене.

void makeGround() {

    glBindTexture( GL_TEXTURE_2D, texture );

    GLfloat mat_specular[]      = { 0.5, 0.5, 0.5, 1.0 };
    GLfloat mat_diffuse[]       = { 0.8, 0.8, 0.8, 1.0 };
    GLfloat mat_shininess[]     = { 100.0 };

    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
    glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);

    //glColor3f(1.0, 1.0, 1.0);

    glPushMatrix();
        glTranslatef(-(size/2), 0.0f, -(size/2));
        glCallList(LIST1);
    glPopMatrix();
}

Что я должен делать между рисованием различных элементов, чтобы этого не происходило?

1 Ответ

4 голосов
/ 02 декабря 2011

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

...