设置纹理过滤器有多重要?
在第3章的书Java Game Development with LibGDX中,他们设置了纹理过滤器。
当我使用assetmanager加载视频资产时,无法将TextureRegion转换为纹理以设置纹理过滤器。
但是我可以像这样在整个Spritesheet上设置纹理过滤器:
textureAtlas = assetManager.get("images/packed/game.pack.atlas") // all images are found in this global static variable
textureAtlas!!.findRegion("button").texture.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear)
设置纹理过滤器有多重要?这样可以解决吗?如何从地图集中获取纹理?
答案 0 :(得分:1)
纹理始终具有过滤器。如果未设置,则其默认过滤器为(最近,最近)。该滤镜适用于复古图形(像素化外观)。否则,您极有可能要使用(MipMapLinearLinear,线性)。如果您的游戏大部分都已完成,并且您已经将精灵图形识别为性能瓶颈,那么您可以降级为(MipMapLinearNearest,Linear)。
使用TexturePacker创建地图集时,有一个用于纹理过滤器的选项,如果设置了此选项,则在将TextureAtlas加载到游戏中后不必进行设置。您也可以像这样在打包文件的顶部添加一行:
filter: MipMapLinearLinear,Linear
否则,如果要将其设置在地图集上,可以使用单页地图集来做您要做的事情,并使用来自任何纹理区域的纹理参考来应用滤镜,因为它们都是参考相同的Texture实例。但是TextureAtlases可以有多个页面,因此这样做更合适:
for (Texture texture : textureAtlas.getTextures())
texture.setFilter(...);
编辑:要将设置添加到TexturePacker构建中,请在带有源图像的目录中放置一个名为pack.json的文本文件。您只需要添加要从默认值更改的设置。 LibGDX可以读取简化的json,该json省略了没有空格的元素的引号。因此,只需设置纹理过滤器,这就是您在文件中所需的全部内容:
{
filterMin: MipMapLinearLinear,
filterMag: Linear
}