Fonts libGDX平滑自由字体

Fonts libGDX平滑自由字体,fonts,filter,libgdx,freetype,mipmaps,Fonts,Filter,Libgdx,Freetype,Mipmaps,我无法使用libGDX获得平滑字体。我已经在这个网站上搜索过了,在谷歌上,我尝试过解决这些问题的方法,但是我的字体呈现总是很差 例如: 我尝试了几种方法,总是得到与上图所描述的完全相同的结果 我用来生成字体的一种方法是: public static BitmapFont generateFont(String fontPath, float size){ FileHandle fontFile = Gdx.files.internal(fontPath); FreeTypeFo

我无法使用libGDX获得平滑字体。我已经在这个网站上搜索过了,在谷歌上,我尝试过解决这些问题的方法,但是我的字体呈现总是很差

例如:

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

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

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;
}
我尝试的另一个策略是在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);
这两种策略给出了相同的结果,但最让我恼火的是,即使我删除了“genMipMaps=true”和这些方法中的TextureFilter,我仍然有相同的结果。就好像过滤器对字体没用一样

我错过了什么


谢谢

为了获得更好的质量,我认为您必须侵入着色器。因为libgdx,这并不难

按照我的说法,我应该为你提供最好的服务。wiki提供了一个很好的关于使用它们的教程。它们实际上可以显著提高字体的质量


希望这有帮助。

好的,最后这里是一个解决方案: 我只是将TextureFilter从MipmapLinearNet更改为Linear,并获得平滑纹理:

起初,我非常不愿意使用线性滤波器,因为我认为它会降低帧速率,根据这一点。但我没有用fps记录器观察到任何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);

谢谢你的回答,但我不想使用着色器,因为它需要使用spritebatch。在我的应用程序中,我使用一个舞台,并在几个演员中使用字体。着色器不适合我的代码。我很确定我的代码中只缺少一点东西来使用TextureFilter,但我无法找到它是什么。你的OpenGL视口和屏幕大小完全一样吗?(可能是字体没有问题,其他地方也有缩放现象?)我没有触摸视口,所以默认情况下,它的大小应该与屏幕大小相同,我想。可能是因为视口的原因,我使用的是FitViewport,字体一点也不平滑。如何设置视口以使字体平滑?如果不使用mipmap过滤器,则不需要生成mipmap。