opengl 渲染纹理并在是不是使用 mipmap 之间切换

Posted

技术标签:

【中文标题】opengl 渲染纹理并在是不是使用 mipmap 之间切换【英文标题】:opengl render texture and switch between with mipmap or notopengl 渲染纹理并在是否使用 mipmap 之间切换 【发布时间】:2012-12-16 19:31:15 【问题描述】:

我使用此代码在带有 mipmap 的图像之间切换:

if ( tex->hasMipMaps ) 
            glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR );
            glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR );
        
        else 
            glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
            glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
        

但是会发生这种情况:

表格是在没有 mipmap 的情况下呈现的,但是当我将注册纹理代码更改为:

   // if ( tex->hasMipMaps ) 
                glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR );
                glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR );
            //
            //else 
            //  glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
            //  glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
            //

结果如下: mipmap 有效,但是我的字体纹理有点丢失,有没有办法渲染带有 mipmaps 的纹理(如模型)和一些没有 mipmaps 的纹理(如字体、粒子)? 我需要调用 glTexParameteri 来切换某些状态吗?

【问题讨论】:

GL_TEXTURE_MAG_FILTER 的有效值仅是 GL_LINEAR 和 GL_NEAREST。没有用于放大的 mipmapping。 【参考方案1】:

没有完整的 mipmap 集的纹理对象(通常)会呈现白色,如您所见。

如果您的某些纹理没有 mipmap,您必须在每个网格级别启用/禁用 mipmap(假设每个网格一个纹理)。

【讨论】:

以上是关于opengl 渲染纹理并在是不是使用 mipmap 之间切换的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL RGB DXT1压缩纹理mipmap上传

初识OpenGL (-)多级渐远纹理(Mipmap)

初识OpenGL (-)多级渐远纹理(Mipmap)

初识OpenGL (-)多级渐远纹理(Mipmap)

OpenGL-纹理(下)

opengl渲染时画面抖动