|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
01.01.2011, 22:26 | #1 |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
Редактор метрики шрифта
Вот, на днях прикручивал к своей программке рисованные шрифты и придумал такое понятие как метрика. Вобщем набор структур RECT по одной на каждый символ шрифта. Но структуры немного ужатые, размер поля структуры сокращён до двух байт. Параллельно написал программку для редактирования массива таких структур и сохранения их в файл.
Вот, собственно, зацените. В архиве программка, картинка одного шрифта и метрика, сделанная этим редактором.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
02.01.2011, 10:34 | #2 |
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
Молодец . Похоже на редакторы шрифтов некоторых движков.
|
02.01.2011, 16:20 | #3 | |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Хы, а у меня нет редактора шрифтов, этим делом заведует Photoshop, просто разметка выставлена, и игра сама берет символы и меняет цвет.
Цитата:
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
|
02.01.2011, 17:15 | #4 |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
Может я себе вообще весь механизм неправильно представляю.
Ну вот у меня сейчас сделано так. 1. Есть картинка шрифта (jpg или gif), содержащая изображения всех символов, которые может отображать данный шрифт. 2. Есть метрика шрифта, соответственно массив структур RECT, по одной структуре на символ. 3. Есть строка символов соответствия - это чтобы программа знала какому символу какая структура из метрики соответствует. 4. И есть функция, которая вобщем то рисует текст такими шрифтами. Она берёт по строке соответствия из массива структур RECT соответствующую заданному символу структуру. Затем по этой структуре берёт кусок текстуры из общей картинки и рисует нужную буковку. Примерно вот что получается в итоге: Редактор нужен просто для более удобной разметки текстуры шрифта. А вот как в Potoshope разметить? Как потом программа понимает, что это, например, символ 'A'?
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
02.01.2011, 20:02 | #5 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Понятно. У мня тоже графические куски с альфа-каналом, все из одной длинной полоски шрифта, заданного формата в Photoshop. Вот как выглядит в игре:
MMO-2D-RPG-Инвентарь.jpg Принцип прост. Ты создаешь шрифт, из тех, что доступны в Photoshop'е, задаешь эффекты, тени, выделение, все что нужно. Затем переводишь в изображение спрайтовое с векторного типа шрифта, двигаешь все символы друг к другу до нужного расстояния, равномерного. Затем по верхней линии сборной текстуры шрифта (она обычно пустая) проставляешь контрольные пиксели. Пиксел по-X ставится в аккурат по началу символа, стало быть, следующий пиксел будет у начала следующего символа, ...значит между этими трассирующими пикселами длина очередного символа, а цвет пиксела указывает на код символа. В любой последовательности расположенные символы алгоритм распознает и загрузит куски в массив [0..255] диапазона особого типа, с параметрами кусочков графических изображений, так что потом можно пользоваться командой Ord по символам строки String и брать изображения символов из массива конкретного шрифта. Или если вместо String используется PAnsiChar или вообще всегда текст хранится в байтовом массиве в виде кода, то быстро пробегая по массиву кодового текста можно надергать и отрисовать шрифт. У меня это делает ассемблер MMX/SSE.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Последний раз редактировалось Beermonza; 02.01.2011 в 20:08. |
04.01.2011, 00:41 | #6 |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
Красиво.
А я тут подумал (а я иногда думаю). Вобщем, не очень логичная у меня схема была. Т.е. как то нелепо иметь отдельно метрику и строку соответствия. Получается метрика определяет геометрию символа, но не определяет его значение. Поэтому я всё переделал. Теперь метрика - это массив таких структур: Код:
Ну и новая программка
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
04.01.2011, 02:20 | #7 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Ну, вообще правильно, ...только не понял, зачем нужны left, top, right, bottom, и зачем TRect. Достаточно TBitmap, W и H куска знать, а далее процедура сама отрисует в нужных координатах.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
04.01.2011, 02:37 | #8 | |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
Цитата:
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
|
04.01.2011, 03:15 | #9 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
Запекаем шрифты в текстуру исходя из оптимального использования пространства и записываем всё это безобразие в xml, как цивилизованные люди Вот такой результат даёт утилита из asphyre
пыщь
|
04.01.2011, 03:42 | #10 | |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
Цивилизованные люди? Это вы о ком? Правильно, в XML его. Сколько там? 94 символа? И уже 9.5 к. А, ну да, сам шрифт то всего 39. Действительно цивилизованно.
Цитата:
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
C++ Изменение шрифта | Memfis_nya | Помощь студентам | 14 | 04.11.2010 12:18 |
Метрики windows | alxd | Помощь студентам | 2 | 17.09.2009 14:42 |
размер шрифта | varelik | Общие вопросы Delphi | 10 | 16.09.2009 13:58 |
Метрики | LastAngel | Общие вопросы Delphi | 1 | 03.05.2008 17:09 |