Вроде как там собственный рендерер с антиалиасом.
Но все эти маленькие штуки на коленке не обеспечивают приемлимого качества. Там в аннотации написано - для микроконтроллеров. А куда микроконтроллеры обычно выводят текст? На двухстрочный монохромный ЖК-экранчик. Там многие косяки и артефакты просто неактуальны.
Добавлено 17-04-2020 в 10:17:
Слева pointSize 46, справа 21. Оба варианта апскейлены в какой-то степени (не замерял в какой именно). С точки зрения унификации кода второй вариант предпочтительнее, т.к. он использует тот же самый шрифт, что и для подсветки кнопок, при наведении мыши. Но как видите, из-за большого скейла уже лезут артефакты с соседней буквы.
Добавлено 17-04-2020 в 10:26:
Впрочем нет, это не из-за скейла. Это из-за блура кое-где оффсеты не соблюдены были. Исправил.
Добавлено 17-04-2020 в 11:18:
Шапки
Есть отличия конечно, но на FFP идеального соответствия добиться проблематично. Да наверное и не особенно нужно. Главное что теперь можно писать любую надпись.
Дядя Миша на четвертой картинке шапка выглядит весьма жутко, да и в принципе ( а на второй еще жутче). В том прямоугольнике, куда вмещается надпись нужна альфа-маска с горизонтальным (а точнее цилиндрическим) градиентом. В Фотожопе это легко делается, но и тут можно алгоритм подобрать
Добавлено 18-04-2020 в 08:22:
Через модуль номера строки пикселей вычислить прогрессию и назначить альфу. Я просто сейчас слишком бухой чтобы формулу сходу накидать)
Добавлено 18-04-2020 в 08:36:
Дядя Миша или не добавлять блюр изначально в атлас, а делать его динамически при отрисовке как постэффект
Добавлено 18-04-2020 в 09:07:
Типа того
Добавлено 18-04-2020 в 09:19:
Я к тому, что просто оффсетами это не поправишь. Я с этим столкнулся, когда в своем 2D движке делал освещение шейдерами, когда обрезка делается прямоугольником и захватывает еще соседние области. То есть тут нужна маска или в целом размывать уже после отрисовки шрифта как постэффект
У меня всё больше крепнет ощущение, что на крестах можно писать только итеративно. Но итеративность находится в серъезном противоречии с комнадной работой. Отсюда и говнокод. Все эти книжки по эффективному программированию бесполезно читать - после каждой итерации код становится лучше и лучше, с учётом его реального использования. При условии конечно, что до оптимального состояния его будет использовать только один человек. Судя по всему к этой итеративности стремятся и движкописатели, получая негодование коммунити - в новой версии опять всё изломали.
Новый вариант нравится больше, наконец избавился от этих уродских ку3шных шрифтов, правда поля с текстом съехали...
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Дядя Миша
С центра, вон текст в поле для ввода и текст в кнопке, есть рамка и текст не по центру.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Если я правильно понял, что извлекает GetCharABCwidths, то нет, это не кернинг. Для кернинга нужно брать значения кернинговых пар и двигать в соответствии с ними (необязательно ближе). А что это за шрифт?
Это не совсем кернинг, это обычные метрики, но их в любом случае необходимо учитывать.
Кернинговые пары, это когда задействовано пара символов. Чтобы их извлечь, нужно уже уметь парсить формат файла шрифта и вытаскиывать из него данные о кернинге и считать расстояние именно между двумя символами. В принципе, это есть уже в 100500 раз упомянутом freetype2, см. документация. В винде само собой тоже есть.
ИМХО, мы не типографисты, поэтому того что сделал Дядя Миша достаточно для GUI, тем более игрового. Тем более Дядя Миша заранее считает метрики и атласы с глифами. Да, можно и скопировать информацию о кернинге и записать его в своём формате шрифтов, но стоит ли оно того? В принципе, с учётом просто метрик символы уже должны быть пропорционально размещены относительно друг друга.
ncuxonaT писал: пары символов, для которых заданы дополнительные смещения относительно друг друга
Я так понимаю это необязательная информация, потому что для всех букв подобный массив займет четверть мегабайта, для ANSI. Да в целом и хрен бы с ними. Тут и так с табами намаялся, а если еще и кернинг учитывать