LibGDX纹理过滤器和Mipmap

9
当我尝试在LibGDX中使用mipmap过滤器时,所有的图像都无法显示。
我是LibGDX的新手,我的简单2D场景中有三个旋转和缩放的圆。为了抗锯齿,我想使用线性过滤。为了获得建议,我查看了this article,其中提到对于高度缩放的图像,可以使用mipmap来提高速度或质量。
第一个意外的现象是,尽管我的所有图像都被缩小了,但只有当magFilter是linear时,我才能看到线性过滤器。换句话说: 这段代码将显示缩小后图像的线性过滤器:
parentTexture.setFilter(TextureFilter.Nearest, TextureFilter.Linear);

而这段代码则不会:

parentTexture.setFilter(TextureFilter.Linear, TextureFilter.Nearest);

这似乎与libGDX函数相反:

void com.badlogic.gdx.graphics.Texture.setFilter(TextureFilter minFilter, TextureFilter magFilter)

这并不会让我烦恼,除非它表明了libgdx错了(不太可能),文章错了(不太可能),或者是我对纹理过滤的理解有误。当我尝试使用mipmap过滤器时,后者似乎特别可能发生。 这段代码导致没有任何内容显示
parentTexture.setFilter(TextureFilter.MipMapLinearLinear, TextureFilter.Linear);

此代码显示,但使用最近过滤

parentTexture.setFilter(TextureFilter.Linear, TextureFilter.MipMapLinearLinear);

任何关于我错误的解释都将不胜感激。我已经在其他地方搜索过了,但是libGDX中的纹理过滤器非常特定,所以除了这篇文章之外,我没有找到太多帮助。
4个回答

12

2
对于使用 AssetManager 的用户而言,可以通过将 TextureParameter.genMipMaps 设置为 true 并在加载纹理时将该纹理参数传递给 AssetManager 来实现: https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/assets/loaders/TextureLoader.TextureParameter.html#genMipMaps TextureLoader.TextureParameter textureParameter = new TextureLoader.TextureParameter(); textureParameter.genMipMaps = true; assetManager.load(textureName, Texture.class, textureParameter); - Denys Kniazhev-Support Ukraine

3

正如Mitesh在他的回答中所说,mipmaps过滤器无法工作,因为您没有告诉Libgdx生成mipmaps。

如果您正在使用资产管理器,代码将类似于以下内容:

 TextureParameter param = new TextureParameter();
 param.genMipMaps = true; // enabling mipmaps

 manager.load("path/to/texfile.png", Texture.class, param);

 Texture tex = manager.get("path/to/texfile.png", Texture.class);
 tex.setFilter(TextureFilter.MipMap, TextureFilter.Nearest);

1

你的图片可能存在多个问题:

  1. 如果你使用的是像354X420这样大小的图片,它应该是2的幂次方,否则它将无法正常工作。在这种情况下,你需要获取512X512或其他2的幂次方大小的图片。

  2. 当你想要启用Mipmap过滤时,需要使用布尔类型的genMipMaps变量来告诉libgdx是否生成mipmap。


首先,这个图像是2的幂次方,即使不是,任何支持OpenGL 2.0 ES的设备仍然可以处理它。 - Kenkron

0

尝试使用相同的minFilter和maxFilter。我曾经遇到过类似的问题,如果我放置 TextureFilter.Linear, TextureFilter.Linear 或者两者都使用MipMap,问题就解决了。 希望这可以帮到你。


它适用于线性滤波器,但当我使用MipMap滤波器时,纹理变成了白色。我认为这是因为最大化的MipMap滤波器在内存方面没有意义。 - Kenkron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接