Есть три распространенных способа сделать это. Дело не в полном устранении артефактов - что невозможно, если у вас нет неограниченной памяти или процессорного времени - а скорее в том, чтобы минимизировать их таким образом, чтобы они соответствовали вашему существующему коду и целевым платформам.
Во-первых, просто используйте растеризатор шрифта - обычно FreeType - чтобы растеризовать шрифт до нужного размера при увеличении. Это будет отлично смотреться на скриншотах, но невероятно медленно. Вы можете решить проблему медлительности путем кэширования размеров, но тогда она становится невероятно требовательной к памяти. Он также не очень хорошо выглядит в движении, потому что для того, чтобы глифы выглядели хорошо при статическом отображении, требуется их неравномерное масштабирование. Тем не менее, это вариант, если вы находитесь на платформе с достаточным объемом памяти (например, ПК), и ваши весы ограничены небольшим диапазоном, например, от 10 до 30 пикселей. Этот метод также не допускает большого количества конфет.
Во-вторых, вы можете хранить свой текст в виде сетки. Для этого существуют некоторые библиотеки, например GLTT , или вы можете написать свою. Теперь у вас больше нет пиксельных артефактов, но у вас будут полигональные артефакты, если вы приблизитесь очень близко - как и любая другая сетка в 3D-игре. Текст сетки допускает много приятных глаз, поскольку можно применять вершинные шейдеры, а сетку можно чередовать с любым другим рисунком мира, который вы делаете. Он достаточно легкий для памяти и процессора, и его легко измерить, так как это просто стандартная сетка. Может быть трудно интегрироваться в обычный конвейер 2D рендеринга на основе спрайтов.
В-третьих, вы можете использовать поля расстояния в сочетании с пиксельным шейдером . Это относительно новая техника, которая в настоящее время популярна: использование простого шейдера для выборки готовой текстуры и «бесплатная» билинейная фильтрация на вашей видеокарте для точного масштабирования глифов. Он использует мало и легко предсказуемой памяти по сравнению с другими методами - от 0,5 МБ до 1 МБ текстуры на набор символов на шрифт. Он хорошо вписывается в конвейеры рендеринга на основе спрайтов, потому что он основан на спрайтах; каждый глиф - все еще текстурированный квад Он производит пиксельные артефакты, но очень мало по сравнению с другими методами, которые масштабируют текстуры. Существует также откат с фиксированной функцией, если пиксельные шейдеры недоступны, но текст заканчивается очень псевдонимом. Поскольку сэмплирование выполняется в пиксельном шейдере, оно допускает некоторую конфету, как выделение и затенение, по дешевке.