9

当我尝试在 LibGDX 中使用 mipmap 过滤时,没有图像出现。

我是 LibGDX 的新手,我有一个简单的 2d 场景,其中包含三个旋转、缩放的圆圈。为了消除它们的锯齿,我想使用线性过滤。作为建议,我查看了这篇文章,它说,对于大规模缩放的图像,可以使用 mipmap 来提高速度或质量。

第一个意外的出现是,尽管我的所有图像都按比例缩小,但如果 magFilter 是线性的,我只会看到线性过滤器。换句话说:

此代码将显示缩小图像的线性过滤器:

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

4 回答 4

12

我遇到了同样的问题,结果发现修复非常简单。创建 时Texture,需要指定它使用 mipmap。

您所要做的就是将第二个参数传递给Texture构造函数,如下所示:

Texture myTexture = new Texture(Gdx.files.internal("myImage.png"), true);

您可以Texture在此处查看 API 文档中的所有类构造函数:http: //libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/Texture.html

于 2014-08-05T21:01:59.817 回答
3

就像 Mitesh 在他的回答中所说, mipmaps 过滤器不起作用,因为您没有告诉 Libgdx 生成 mipmap。

如果您使用资产管理器,代码将是这样的

 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);
于 2014-07-18T14:08:11.313 回答
1

您的图像可能存在多个问题:

  1. 它应该是 2 的幂,如果您使用的是 354X420 等尺寸的图像,它将不起作用。在这种情况下,您需要拍摄 512X512 或 2 的任何其他幂的图像。

  2. 当你想启用 Mipmap 过滤时,你需要使用布尔值 genMipMaps 来启用它,它告诉 libgdx 是否生成 mapmaps。

于 2013-06-26T19:33:27.323 回答
0

尝试使用相同的 minFilter 和 maxFilter。我有一个类似的问题,如果我放置 TextureFilter.Linear、TextureFilter.Linear 或同时放置 MipMap,问题就解决了。希望这可以帮助。

于 2013-03-13T20:25:04.960 回答