libGDX smooth FreeTypeFonts

vdl*_*mrc 3 fonts filter freetype mipmaps libgdx

我有问题用libGDX获得流畅的字体.我已经在这个网站上搜索了,在google上,我在这里这里尝试了这些问题的解决方案,但我的字体渲染效果一直很差.

例如: 在此输入图像描述

我尝试了几种方法,并且总是得到与上图所描述的完全相同的结果.

我用来生成字体的一种方法是:

public static BitmapFont generateFont(String fontPath, float size){
    FileHandle fontFile = Gdx.files.internal(fontPath);
    FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);
    FreeTypeFontGenerator.FreeTypeFontParameter params = new FreeTypeFontGenerator.FreeTypeFontParameter();
    params.genMipMaps = true;
    params.magFilter = TextureFilter.MipMapLinearNearest;
    params.minFilter = TextureFilter.MipMapLinearNearest;
    params.size = (int)Math.ceil(size);
    generator.scaleForPixelHeight((int)Math.ceil(size));
    BitmapFont f = generator.generateFont(params);
    return f;
}
Run Code Online (Sandbox Code Playgroud)

我尝试的另一个策略是在AssetManager中加载字体:

FileHandleResolver resolver = new InternalFileHandleResolver();
assetsManager.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver));
assetsManager.setLoader(BitmapFont.class, ".ttf", new FreetypeFontLoader(resolver));

FreeTypeFontLoaderParameter size4Params = new FreeTypeFontLoaderParameter();
sizeParams.fontFileName = "Fonts/GOTHIC.TTF";       
sizeParams.fontParameters.size = (int)Math.ceil(2*Gdx.graphics.getWidth()/9);
sizeParams.fontParameters.genMipMaps = true;                    
sizeParams.fontParameters.minFilter = TextureFilter.MipMapLinearNearest;
sizeParams.fontParameters.magFilter = TextureFilter.MipMapLinearNearest;                            
assetsManager.load("font1.ttf", BitmapFont.class, sizeParams);
Run Code Online (Sandbox Code Playgroud)

这两个策略给出了相同的结果,但最让我恼火的是,即使我删除了"genMipMaps = true",以及这些方法中的TextureFilters,我仍然会得到相同的结果.这就像过滤器对字体无用.

我错过了什么?

谢谢 !

vdl*_*mrc 7

好的,所以最后这里是一个解决方案:我只是将TextureFilter从MipMapLinearNearest更改为Linear,我获得了一个平滑的纹理: 在此输入图像描述

根据这篇文章,起初我非常不愿意使用线性滤波器,因为我会降低帧速率.但我没有观察到FPSLogger的任何fps下降,所以看起来一切都很好.

这是我使用资产管理器生成字体的最终代码:

FileHandleResolver resolver = new InternalFileHandleResolver();
assetsManager.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver));
assetsManager.setLoader(BitmapFont.class, ".ttf", new FreetypeFontLoader(resolver));

FreeTypeFontLoaderParameter size4Params = new FreeTypeFontLoaderParameter();
sizeParams.fontFileName = "Fonts/GOTHIC.TTF";       
sizeParams.fontParameters.size = (int)Math.ceil(2*Gdx.graphics.getWidth()/9);                 
sizeParams.fontParameters.minFilter = TextureFilter.Linear;
sizeParams.fontParameters.magFilter = TextureFilter.Linear;                            
assetsManager.load("font1.ttf", BitmapFont.class, sizeParams);
Run Code Online (Sandbox Code Playgroud)

  • 如果您不使用mipmap过滤器,则无需生成mipmap. (3认同)