libgdx纹理过滤器和mipmap

时间:2013-03-13 06:54:36

标签: java textures libgdx mipmaps

当我尝试在LibGDX中使用mipmap过滤时,不会出现任何图像。

我是LibGDX的新手,我有一个简单的2D场景,有三个旋转的缩放圆圈。为了对它们进行反混淆,我想使用线性过滤。对于建议,我查看了this article,其中说,对于大规模缩放的图像,可以使用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 个答案:

答案 0 :(得分:9)

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

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

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

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

答案 1 :(得分:3)

就像Mitesh在他的answer 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);

答案 2 :(得分:1)

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

  1. 它应该是2的幂,如果你使用像354X420这样大小的图像,它将无法工作。在这种情况下,您需要拍摄512X512的图像或2的任何其他功率。

  2. 如果要启用Mipmap过滤,则需要使用boolean genMipMaps启用它,告知libgdx是否生成地图地图。

答案 3 :(得分:0)

尝试使用相同的minFilter和maxFilter。我有一个类似的问题,如果我把     TextureFilter.Linear,     TextureFilter.Linear 或者两个MipMap问题都解决了。 希望这会有所帮助。

相关问题