Fonts libGDX平滑自由字体
我无法使用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
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。