Шрифт LibGDX FreeType размыт

Я создаю свой шрифт динамически, используя процент высоты экрана и устанавливая проценты (очевидно, умноженные на плотность в будущем.

Некоторые заметки. Я читаю из файла OTF. Использование последней версии LibGDX (версия 1.2.0)

У меня следующая проблема: (Большие разрывы шрифта и выглядят очень размытыми, но только на среднем. Большой и мелкий выглядят очень резко)

Плохой шрифт

Мои предустановленные размеры шрифта:

//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? (Должен ли шрифт быть степенью двойки, чтобы быть четным?)

Шрифты рисуются на разных разрешениях экрана, поэтому о создании трех растровых шрифтов определенного размера не может быть и речи.

Может ли кто-нибудь помочь мне здесь?


person Oliver Dixon    schedule 13.07.2014    source источник
comment
Если вы используете один BitmapFont разных размеров, вам нужно использовать мипмаппинг, чтобы он хорошо выглядел во всех размерах. И, вероятно, MipMapLinearLinear для minFactor.   -  person Tenfour04    schedule 14.07.2014
comment
Я использую несколько размеров шрифта Bitmap, чтобы точно соответствовать разрешению экрана, но не могли бы вы дать ссылку или объяснить это?   -  person Oliver Dixon    schedule 14.07.2014
comment
О, извините, я неправильно понял, что вы делаете. Мимаппинг не нужен, как вы это делаете. Я не думаю, что сила двойки тоже твоя проблема. Насколько мне известно, не-POT только подвергает вас риску снижения производительности (и, возможно, чисто черных текстур на некоторых устройствах, если вы используете старую версию libgdx и используете OpenGL ES 1.0/1.1). Я мало использовал генератор шрифтов, поэтому не знаю, что еще посоветовать.   -  person Tenfour04    schedule 14.07.2014
comment
Я использую новейшую версию, совершенно не понимаю, почему она это делает, если она точно соответствует разрешению. Я могу отправить вам весь исходный код, если хотите?   -  person Oliver Dixon    schedule 14.07.2014
comment
Я рекомендую посетить форумы libgdx.com. Скорее всего, вы найдете там кого-то, кто знает ответ. У меня нет первого подозрения, что может вызвать эту проблему, поэтому я так же потерян, как и вы.   -  person Tenfour04    schedule 14.07.2014


Ответы (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;

Это даст вам очень хороший четкий шрифт на любом разрешении. ГЛ.

person Oliver Dixon    schedule 14.07.2014
comment
Я не могу еще день. - person Oliver Dixon; 15.07.2014
comment
Поправьте меня, если я ошибаюсь, я слышал, что установка мипмэппинга в увеличении бесполезна. Мимаппинг предназначен только для минификации. - person WeirdElfB0y; 04.08.2016