我在 OpenGL 中实现 mipmapping 时遇到问题。我正在使用 OpenFrameworks 并修改了 ofTexture 类以支持 mipmap 的创建和渲染。
以下代码是该类的原始纹理创建代码(为清楚起见略有修改):
glEnable(texData.textureTarget);
glBindTexture(texData.textureTarget, (GLuint)texData.textureID);
glTexSubImage2D(texData.textureTarget, 0, 0, 0, w, h, texData.glType, texData.pixelType, data);
glTexParameteri(texData.textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(texData.textureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glDisable(texData.textureTarget);
Run Code Online (Sandbox Code Playgroud)
这是我的带有 mipmap 支持的版本:
glEnable(texData.textureTarget);
glBindTexture(texData.textureTarget, (GLuint)texData.textureID);
gluBuild2DMipmaps(texData.textureTarget, texData.glTypeInternal, w, h, texData.glType, texData.pixelType, data);
glTexParameteri(texData.textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(texData.textureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glDisable(texData.textureTarget);
Run Code Online (Sandbox Code Playgroud)
该代码不会生成错误(gluBuild2DMipmaps 返回“0”)并且纹理渲染不会出现问题。但是,我没有看到任何区别。
我渲染的场景由 z=0 处的“平坦、方形瓷砖”组成。这基本上是一个 2D 场景。在绘制图块之前,我使用“glScale()”进行放大和缩小。当我缩小时,图块纹理的像素开始“跳舞”,表明(据我所知)未过滤的纹理查找。请参阅:http://www.youtube.com/watch?v =b_As2Np3m8A 25 秒。
我的问题是:由于我不移动相机位置,而仅使用整个场景的缩放,这是否意味着 OpenGL 无法决定适当的 mipmap 级别并使用完整纹理大小(级别 0)?
保罗