【问题标题】:LibGDX FreeType font blurryLibGDX FreeType 字体模糊
【发布时间】:2014-09-03 19:46:47
【问题描述】:

我正在使用屏幕高度百分比动态生成我的字体并设置百分比(显然将来会乘以密度。

一些笔记。 我正在读取 OTF 文件。 使用最新版本的 LibGDX(版本 1.2.0)

我有以下问题: (大字体中断并且看起来非常模糊,但仅在 medium 上。Largesmall 看起来非常清晰)

我的预设字体大小:

//Font sizes, small, med, large as a percentage of the screen.
    public static float
            FONT_SIZE_LARGE = 0.175f,
            FONT_SIZE_MEDIUM = 0.06f,
            FONT_SIZE_SMALL = 0.04f;

我的字体生成器设置

FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
        FreeTypeFontGenerator generator;
this.generator = new FreeTypeFontGenerator(Gdx.files.internal(filename));

创建实际字体:

//Create a new font and add it to available font sizes.
public BitmapFont createFont(float size, float color)
{
    this.parameter.size = Math.round(size);
    BitmapFont bitmapFont = generator.generateFont(parameter);
    bitmapFont.setColor(color);
    listOfFonts.add(new FontStorage(bitmapFont, size));
    return bitmapFont;
}

现在我在不同的设备上尝试了一些东西,但仍然遇到同样的问题。我想这可能是因为它不是2的力量? (字体是否需要是 2 的幂才能是偶数?)

字体是在许多不同的屏幕分辨率上绘制的,因此制作三种一定大小的位图字体是不可能的。

有人可以帮我吗?

【问题讨论】:

  • 如果使用不同尺寸的单个 BitmapFont,您需要使用 mipmapping 使其在所有尺寸下看起来都很好。可能是 minFactor 的 MipMapLinearLinear。
  • 我正在使用多种位图字体大小来完全匹配屏幕分辨率,但你能链接或解释一下吗?
  • 哦,对不起,我误解了你在做什么。你这样做的方式是不必要的。我也不认为二的幂是你的问题。据我所知,非 POT 只会让您面临性能降低的风险(如果您使用的是旧版本的 libgdx 并使用 OpenGL ES 1.0/1.1,则可能在某些设备上出现纯黑色纹理)。我没怎么用过字体生成器,所以不知道还有什么好建议的。
  • 我使用的是最新版本,完全不知道为什么它与 res 完全匹配。如果你愿意,我可以把整个源代码发给你吗?
  • 我推荐去 libgdx.com 论坛。您可能会在那里找到知道答案的人。我不知道是什么导致了这个问题,所以我和你一样迷茫。

标签: java android opengl-es libgdx freetype


【解决方案1】:

我想通了,如果你想要最终清晰的字体,你需要设置 3 个设置。

前两个是在从文件创建之前(可以是 OTF 或 TTF),它们是:

//Make sure you ceil for your current resolution otherwise you'll be nasty cut-offs.
this.parameter.size = (int)Math.ceil(size);
this.generator.scaleForPixelHeight((int)Math.ceil(size));

下一步是设置放大和缩小过滤器。 (如果你也想缩放,我不是因为我画的几乎像素完美)。无论如何,这是代码:

this.generator = new FreeTypeFontGenerator(Gdx.files.internal(filename));
this.parameter.minFilter = Texture.TextureFilter.Nearest;
this.parameter.magFilter = Texture.TextureFilter.MipMapLinearNearest;

这将为您提供在任何分辨率下都非常漂亮的清晰字体。总账。

【讨论】:

  • 我不能再等一天了。
  • 如果我错了,请纠正我,我听说在放大中设置 mipmapping 没有用。 Mipmapping 仅用于缩小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多