OpenGL Mipmaps и SOIL Флаг - PullRequest
       48

OpenGL Mipmaps и SOIL Флаг

1 голос
/ 22 апреля 2011

Итак, я получил ПОЧВУ, загружающую мои изображения сейчас, но там написано, что вы можете установить флаг для поколения MipMap.Я установил флаг и, насколько я знаю, OpenGL сделает все остальное, когда дело доходит до использования MipMaps в определенные моменты времени.

Я ошибаюсь в этом?и если да, то как мне заставить работать MipMaps?

РЕДАКТИРОВАТЬ: Итак, это моя функция инициализации, где я вызываю SOIL для загрузки моего изображения с ФЛАГОМ для MIPMAPS

//========================================
//  init
//========================================
void init(void) {

    glEnable(GL_DEPTH_TEST);
    glEnable(GL_NORMALIZE);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glShadeModel(GL_SMOOTH);
    glEnable (GL_BLEND); //transparency
    glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glEnable(GL_TEXTURE_2D);

    timerSpeed = 1000.0/60.0;

    for(int i=0; i<6; i++) {

        TextureNames[i] = TextureNames[i]+".bmp";
        TextureArray[i] = SOIL_load_OGL_texture((char*)TextureNames[i].c_str(),3,
                                                SOIL_CREATE_NEW_ID, 
                                                SOIL_FLAG_POWER_OF_TWO |
                                                SOIL_FLAG_MIPMAPS);


    }

}

И здесь я вызываю bindtexture и texparam (сокращаю его, потому что это просто другие грани куба, popmatrix и end} для функции

void drawCube(void) {

    glPushMatrix();

        glBindTexture(GL_TEXTURE_2D, TextureArray[1]);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST_MIPMAP_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);   

        //FRONT FACE OF CUBE
            glNormal3f(0.0,0.0,1.0);
            glBegin(GL_POLYGON);
            glTexCoord2f(0.0,0.0);  glVertex3f(-1.0,-1.0,1.0);
            glTexCoord2f(1.0,0.0);  glVertex3f(1.0,-1.0,1.0);
            glTexCoord2f(1.0,1.0);  glVertex3f(1.0,1.0,1.0);
            glTexCoord2f(0.0,1.0);  glVertex3f(-1.0,1.0,1.0);
            glEnd();

        //LEFT FACE OF CUBE
            glNormal3f(-1.0,0.0,0.0);
            glBegin(GL_POLYGON);
            glTexCoord2f(0.0,0.0);  glVertex3f(-1.0,-1.0,-1.0);
            glTexCoord2f(1.0,0.0);  glVertex3f(-1.0,-1.0,1.0);
            glTexCoord2f(1.0,1.0);  glVertex3f(-1.0,1.0,1.0);
            glTexCoord2f(0.0,1.0);  glVertex3f(-1.0,1.0,-1.0);
            glEnd();

1 Ответ

2 голосов
/ 22 апреля 2011

Вам необходимо переключить фильтрацию текстур для использования mipmapping:

glBindTexture(GL_TEXTURE_2D, theTextureID);
glTexParamteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);

Вы также можете посмотреть режимы анизотропной фильтрации для повышения качества фильтрации: http://www.opengl.org/registry/specs/EXT/texture_filter_anisotropic.txt

...