【问题标题】:OpenGL Mipmaps and SOIL FlagOpenGL Mipmaps 和 SOIL 标志
【发布时间】:2011-04-22 06:57:26
【问题描述】:

所以我现在让 SOIL 加载我的图像,但它说你可以设置一个标志 MipMap 生成。我设置了标志,据我所知 OpenGL 做了 在某些时候使用 MipMaps 时要休息。

我错了吗?如果是,如何让 MipMaps 工作?

编辑:这是我的 init 函数,我在其中调用 SOIL 以使用 FLAG 为 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();

【问题讨论】:

  • 你为什么要传 3 而不是 SOIL_LOAD_RGB?
  • 嘿,对于迟到的 RTS 响应感到抱歉,我已经有一段时间没有搞砸这个了,但是如果我记得正确放置一个数字,就像调用 SOIL_LOAD_RGB 一样。我可能是错的,但我认为是这样的!

标签: opengl mipmaps soil


【解决方案1】:

你需要切换纹理过滤来使用 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

【讨论】:

  • 嗯.. 我会做 glBindTexture glTexParamteri,但是当我调用纹理来应用它时我会这样做。
  • 如果你有机会看看我上面的编辑,也许我做错了什么。 (上面的代码确实可以很好地加载图像,但不会发生 mipmapping)
  • 呸,没关系!必须同时设置 MIN_FILTER 和 MAG_FILTER 才能使用 GL_LINEAR_MIPMAP_LINEAR!
猜你喜欢
  • 2011-08-24
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多