我在OpenGL中实现mipmapping时遇到了问题。我正在使用OpenFrameworks,并已修改ofTexture类以支持创建和渲染mipmaps。
以下代码是该类的原始纹理创建代码(稍作修改以提高清晰度):
代码没有生成错误(gluBuild2DMipmaps返回“0”),纹理也能被渲染。然而,我没有看到任何区别。
我渲染的场景由z=0的“平面正方形瓦片”组成。基本上是一个2D场景。在绘制瓦片之前,我使用“glScale()”进行缩放来放大和缩小。当我缩小时,瓦片纹理的像素开始“跳动”,表明(据我所知)未经过滤的纹理查找。请参见:http://www.youtube.com/watch?v=b_As2Np3m8A 在25秒处。
我的问题是:由于我没有移动相机位置,只是对整个场景进行缩放,这是否意味着OpenGL不能决定适当的mipmap级别并使用完整的纹理大小(级别0)?
保罗
以下代码是该类的原始纹理创建代码(稍作修改以提高清晰度):
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)?
保罗