Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.01.2011, 22:26   #1
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию Редактор метрики шрифта

Вот, на днях прикручивал к своей программке рисованные шрифты и придумал такое понятие как метрика. Вобщем набор структур RECT по одной на каждый символ шрифта. Но структуры немного ужатые, размер поля структуры сокращён до двух байт. Параллельно написал программку для редактирования массива таких структур и сохранения их в файл.


Вот, собственно, зацените.
В архиве программка, картинка одного шрифта и метрика, сделанная этим редактором.
Вложения
Тип файла: rar formFontMetr.rar (12.4 Кб, 20 просмотров)
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 02.01.2011, 10:34   #2
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Молодец . Похоже на редакторы шрифтов некоторых движков.
Вадим Буренков вне форума Ответить с цитированием
Старый 02.01.2011, 16:20   #3
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Хы, а у меня нет редактора шрифтов, этим делом заведует Photoshop, просто разметка выставлена, и игра сама берет символы и меняет цвет.

Цитата:
Сообщение от Ulex
... и придумал такое понятие как метрика
А можно теоретические сведения вкратце, что за понятие, как работает?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 02.01.2011, 17:15   #4
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

Может я себе вообще весь механизм неправильно представляю.
Ну вот у меня сейчас сделано так.
1. Есть картинка шрифта (jpg или gif), содержащая изображения всех символов, которые может отображать данный шрифт.
2. Есть метрика шрифта, соответственно массив структур RECT, по одной структуре на символ.
3. Есть строка символов соответствия - это чтобы программа знала какому символу какая структура из метрики соответствует.
4. И есть функция, которая вобщем то рисует текст такими шрифтами. Она берёт по строке соответствия из массива структур RECT соответствующую заданному символу структуру. Затем по этой структуре берёт кусок текстуры из общей картинки и рисует нужную буковку.
Примерно вот что получается в итоге:


Редактор нужен просто для более удобной разметки текстуры шрифта.
А вот как в Potoshope разметить? Как потом программа понимает, что это, например, символ 'A'?
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 02.01.2011, 20:02   #5
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 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.
Beermonza вне форума Ответить с цитированием
Старый 04.01.2011, 00:41   #6
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

Красиво.
А я тут подумал (а я иногда думаю). Вобщем, не очень логичная у меня схема была. Т.е. как то нелепо иметь отдельно метрику и строку соответствия. Получается метрика определяет геометрию символа, но не определяет его значение. Поэтому я всё переделал. Теперь метрика - это массив таких структур:

Код:
metrik	STRUCT
	SymA	db ?
	SymB	db ?
	left	dw ?
	top	dw ?
	right	dw ?
	bottom	dw ?
metrik	ENDS
SymA и SymB - это значения символа, которому соответсвует регион (left, top, right, bottom) из текстуры шрифта. Их спецально два, чтобы можно было делать регистронезависимые шрифты без избыточности.

Ну и новая программка
Вложения
Тип файла: rar formFontMetr.rar (12.4 Кб, 15 просмотров)
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 04.01.2011, 02:20   #7
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Ну, вообще правильно, ...только не понял, зачем нужны left, top, right, bottom, и зачем TRect. Достаточно TBitmap, W и H куска знать, а далее процедура сама отрисует в нужных координатах.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 04.01.2011, 02:37   #8
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

Цитата:
Достаточно TBitmap, W и H куска знать, а далее процедура сама отрисует в нужных координатах.
А как процедура узнает откуда начинать рисовать символ? Картинка шрифта может быть многострочной. Ну и я в принципе не привязывал метрику к GDI и TBitmap. У меня сейчас, например, шрифты на DX рисуются.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 04.01.2011, 03:15   #9
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Запекаем шрифты в текстуру исходя из оптимального использования пространства и записываем всё это безобразие в xml, как цивилизованные люди Вот такой результат даёт утилита из asphyre
Изображения
Тип файла: png font.png (38.5 Кб, 106 просмотров)
Вложения
Тип файла: txt font.xml.txt (9.3 Кб, 131 просмотров)
пыщь
JTG вне форума Ответить с цитированием
Старый 04.01.2011, 03:42   #10
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

Цивилизованные люди? Это вы о ком? Правильно, в XML его. Сколько там? 94 символа? И уже 9.5 к. А, ну да, сам шрифт то всего 39. Действительно цивилизованно.

Цитата:
Вот такой результат даёт утилита из asphyre
И вообще, каким боком asphyre со всеми своими утилитами к этой теме? Или для рисования текста вне asphyre xml файл какие-то преимущества даёт?
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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