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 之间切换的主要内容,如果未能解决你的问题,请参考以下文章