libgdx纹理filter和mipmap
当我尝试在LibGDX中使用mipmap过滤时,不会出现任何图像。
我是LibGDX的新手,我有一个简单的2D场景,有三个旋转的缩放圆圈。 为了对它们进行反混淆,我想使用线性过滤。 对于建议,我查看了这篇文章 , 该文章说,对于大规模缩放的图像,可以使用mipmap来提高速度或质量。
第一个意想不到的表现是,尽管我的所有图像都按比例缩小,但我只会看到一个线性filter,如果magFilter是线性的。 换一种说法:
此代码将显示缩小图像的线性filter:
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是错误的(不太可能),文章是错误的(不太可能),或者我不理解纹理filter。 当我尝试使用mipmapfilter时,后者似乎特别有可能。
此代码不会显示任何内容
parentTexture.setFilter(TextureFilter.MipMapLinearLinear, TextureFilter.Linear);
此代码显示,但具有最近的过滤
parentTexture.setFilter(TextureFilter.Linear, TextureFilter.MipMapLinearLinear);
任何解释我错的地方都将不胜感激。 我在其他地方搜索过,但libGDX中的纹理filter非常具体,所以除了文章之外,我还没有找到太多帮助。
我遇到了同样的问题,修复结果非常简单。 创建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
就像Mitesh在他的回答中所说的那样,mipmapsfilter不起作用,因为你没有告诉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的幂,如果你使用像354X420大小的图像,它将无法工作。 在这种情况下,您需要拍摄512X512的图像或2的任何其他功率。
-
如果要启用Mipmap过滤,则需要使用boolean genMipMaps启用它,告诉libgdx是否生成mapmaps。
尝试使用相同的minFilter和maxFilter。 我有一个类似的问题,如果我把TextureFilter.Linear,TextureFilter.Linear或两个MipMap都解决了问题。 希望这可以帮助。