我无法在 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);
这是我的支持 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);
该代码不会产生错误(gluBuild2DMipmaps 返回“0”)并且纹理渲染没有问题。但是,我没有看到任何区别。
我渲染的场景由 z=0 处的“扁平方形瓷砖”组成。它基本上是一个 2D 场景。在绘制瓷砖之前,我使用“glScale()”放大和缩小。当我缩小时,平铺纹理的像素开始“跳舞”,表明(据我所知)未过滤的纹理查找。请参阅:http ://www.youtube.com/watch?v= b_As2Np3m8A 25 秒。
我的问题是:由于我不移动相机位置,而只使用整个场景的缩放,这是否意味着 OpenGL 无法决定适当的 mipmap 级别并使用完整的纹理大小(级别 0)?
保罗