|
Опубликовано 12.02.2007 11:52 (18 лет назад) # |
http://www.gamedev.ru/download/?id=4997
История появления
В один прекрасный момент мне понадобилось вставить в игру шрифты. Желания писать свой генератор шрифтов не было, и я посмотрел, что есть в свободном наличии. Требования были простые:
1. Генерация юникодовых шрифтов (это самое главное).
2. Символы не одинаковой ширины (многие шрифтогенерилки грешат этим, как ни странно).
3. Поддержка кернинга (без него надписи зачастую некрасиво смотрятся)
4. Экспорт в xml (лень делать свой или адаптировать имеющийся парзер).
Первые 3 требования были обязательными, последнее требование опционально.
И я среди многочисленных фонторисовалок не нашел ни одной, что удовлетворяла бы этим требованиям. В основном используются в качестве образца для подражания фантастичесие в совей убогости «шрифты NeHe», которые даже не держат юникод! Или, что вообще преступление, генерят по целой текстуре на каждую буковку! Причем такое безобразие творится и в готовых, неплохо себя зарекомендовавших, движках вроде PopCap и HGE (в первом, правда, все более-менее со шрифтами в порядке, если не считать отсутствия юникода, да и общей убогости кода)
Как результат был мною взят FreeType и сооружена программка, которую я и представляю.
Darth’s FontGen v. 0.1
Программа работает с xml-описаниями требуемых шрифтов (туда помещается название, путь до исходного файла, размер и требуемые диапазоны символов). В одном файле может быть произвольное число описаний, программа работает с произвольным числом файлов, указываемых в командной строке.
На выходе генерируется файл [имя_шрифта].jpg с grayscale-картинкой с шрифтом и [имя_шрифта].xml с предельно тупым форматом, разобраться с которым труда не составляет. Содержит описания всех символов, базовое смещение от верхнего левого угла, смещение для базовых координат до следующего символа, высота, ширина и текстурные координаты в готовом к употреблению виде. Если шрифт содержит информацию о кернинге, то после раздела с символами будут все варианты кернинга – левый символ, правый символ и значение, насколько нужно продвинуть указатель.
Рисуется примерно так (псевдокод)
Vec2 pen;
Foreach (glyph in text)
{
DrawGlyph(glyph, pen + glyph.GetBase());
pen += glyph.GetAdvance();
pen += GetKerning(prevGlyph, glyph);
prevGlyph = glyph;
}
В комплект входит программа и пример использования – 2 шрифта с описанием. Разобраться с ней будет несложно, я надеюсь.
Запускается просто:
fontgen test.xml – и через секунду число файлов в папке увеличится.
Если вы нашли программу полезной – мне будет очень интересно узнать об этом.
Ну и обычная критика приветствуется.
редакция от _zlos_, 12.02.2007 11:53 |
|
|
Древний организм
|
Опубликовано 13.02.2007 20:24 (18 лет назад) # |
Приятно, что программу в мою честь называют :) |
|
|
|
Опубликовано 13.02.2007 20:44 (18 лет назад) # |
Если автору интересно почему нету отзывов, то отвечу: здесь большинство обитателей delphi'сты, а не сишники... да и скажи мне не образованному что такое кернинг! {: |
|
|
Администратор
|
Опубликовано 13.02.2007 21:08 (18 лет назад) # |
beisik, расстояние между буквами. ты ж в 3dsm рисовал, обязан знать)
ps гг, bdsm)) |
|
|
|
Опубликовано 14.02.2007 07:48 (18 лет назад) # |
2Darthman
Не в твою, у меня один из ников - Darth
2Beisik
Распарзить XML можно чем угодно, как и прочитать jpeg.
Кернинг - когда буковка немного "наезжает" на другую, чобы лучше выглядеть/ (VA паример) |
|
|
Администратор
|
Опубликовано 14.02.2007 15:29 (18 лет назад) # |
один из ников - Darth
кул) теперь у нас два Дарта, два ОСокиных. тов. Груздев-2, вы где?)))
Кернинг - когда буковка немного "наезжает" на другую
..или наоборот отъезжает от нее) так что это именно расстояние) |
|
|
|
Опубликовано 13.11.2007 20:41 (17 лет назад) # |
Эта, а можно прогу ещё куда-нить залить? И ваще, хотелось бы получить консультацию по всему этому делу.
А-то возникла острая необходимость прикрутить к игре японский язык - теперь вот маюсь.
Двиган HGE.
Заранее спасибо. |
|
|
|
Опубликовано 13.11.2007 20:58 (17 лет назад) # |
И еще два Дрона :)
а Антона тоже два %) |
|
|