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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2011, 12:32   #11
.pixel
c++, dx/ogl
Форумчанин
 
Аватар для .pixel
 
Регистрация: 10.11.2008
Сообщений: 131
По умолчанию

Ulex, надо бы еще автоматическую генерацию метрик прикрутить к программе)
Ну и вообще – да, идея оригинальная для каждой буквы помнить ее метрику. Впрочем отчасти уж очень это походит на вывод текста в ogl там тоже есть нечто общей текстуры символов вот только метрика выводимых символов «считается на ходу».
Но возможно, в таком случае выводится нечто вроде моноширинного шрифта, а не пропорционального.
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but
rather how many batches/frame!
.pixel вне форума Ответить с цитированием
Старый 04.01.2011, 18:45   #12
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Я немного не понял, что особенного в твоей метрике Ulex. Очень похоже на bitmap шрифты. Или это они и есть?
NiCola999 вне форума Ответить с цитированием
Старый 04.01.2011, 21:21   #13
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Ulex Посмотреть сообщение
А как процедура узнает откуда начинать рисовать символ? Картинка шрифта может быть многострочной.
Дело в том, что шрифт не хранится общей текстурой, он при загрузке нарезается в графические фрагменты для каждого символа, и все они находятся в массиве по адресу ячейки, сама сборная текстура удаляется из памяти, она больше не нужна. Т.е. font1[{код символа}].TTex - это битмап, и к нему отдельно font1[{код символа}].TW и font1[{код символа}].TH чтобы не вытаскивать из битмпа теряя время, а сразу использовать область по этим значениям. У меня как такового битмата нет, есть динамический массив и указатель на ОЗУ. Процедура отрисовки получает на входе, например, строку, координаты с какого места начать рисовать текст и сам приемник, куда отрисовывать. Могут быть еще дополнительные флаги, или как у меня - переменные, отвечающие за тип шрифта и цвет. Внутри цикл по числу символов и выдергивание из массива font1, или в зависимости от переменной шрифта из другого массива, хранящего символы иного шрифта, всех графических изображений, друг за дружкой, по счетчику шага текста по-X.

Вот кусочек сборной текстуры шрифта:

Шрифт.jpg

В текстуре и параметры, т.е. размеры каждого символа и его код. Для каждого шрифта и размера нужна отдельная текстура, иначе если создать сразу крупные символы а потом в процессе отрисовки уменьшать, будет потеря драгоценного времени. Гораздо проще сразу создать все нужные текстуры шрифтов и спокойно использовать. Программно задается только цвет, и то при загрузке сразу на нужные цвета, двумерный массив font1[0..9, 0..255], на 10 цветов.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 04.01.2011 в 21:39.
Beermonza вне форума Ответить с цитированием
Старый 05.01.2011, 02:07   #14
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

Цитата:
Сообщение от NiCola999
Я немного не понял, что особенного в твоей метрике Ulex. Очень похоже на bitmap шрифты. Или это они и есть?
А я где-то говорил, что она особенная? Естественно ничего особенного, набор байт, чего там может быть особенного. Просто редактор симпатичный вроде получился, вот решил поделиться. Что там на что похоже беспонятия, вам виднее.

Цитата:
Сообщение от Beermonza
Дело в том, что шрифт не хранится общей текстурой, он при загрузке нарезается в графические фрагменты для каждого символа, и все они находятся в массиве по адресу ячейки, сама сборная текстура удаляется из памяти, она больше не нужна.
Ну это у тебя так сделано. А кто нибудь будет хранить шрифт одной общей текстурой. И как бы дело хозяйское. Метрика должна быть по вохможности универсальная и не привязанная к методам рисования и обработки bitmap_ов или текстур. Не хотите хранить одной картой, да бога ради, храните в массиве кусочками. Это у тебя картинка однострочная и все символы фактически одной высоты. Да и с точкой, определяющей символ тоже геморрой, наверное, тот ещё был. Ты их руками проставлял, или фотошоп это как то автоматизировал? Я тогда перефразирую вопрос, а если шрифт будет такой, как твоя программа его нарежет на кусочки?


Цитата:
Сообщение от .pixel
Ulex, надо бы еще автоматическую генерацию метрик прикрутить к программе)
Была такая идея. Однако тогда структура метрики неполная. Надо ещё как минимум два поля добавлять - отступ сверху и отступ слева. Т.е. сейчас методика рисования такая (рис 1), и если нарезать автоматом (рис 2), то у некоторых символов сверху должна быть пустая шапка, размер которой зависит от символа.



Нарезальщик вряд ли сможет определить какому символу какую шапку сверху надо приклеить. Т.е. всё равно это придётся делать руками. Или же изменить весь механизм рисования (точнее сделать его совсем уж универсальным) и отступы перенести на этап отрисовки, но тогда надо менять структуру метрики (отступ сверху и отступ слева). Пока что этого делать не хочется, ибо как выяснилось это всего навсего банальные bitmap шрифты.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 05.01.2011, 02:23   #15
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Цитата:
Пока что этого делать не хочется, ибо как выяснилось это всего навсего банальные bitmap шрифты.
без обид Недавно смотрел уроки по opengl там были такие шрифты, поэтому вспомнил про них. Продолжай творить. Своё всегда чем-то лучше чужого.
NiCola999 вне форума Ответить с цитированием
Старый 05.01.2011, 20:20   #16
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Ulex, я к тебе без претензий вообще, ты молодец, и очень приятно, что еще кого-то, кроме вашего покорного слуги заботит не легкий путь новичка, и что нужно раскрывать любые аспекты создания игр боле полно, ...в данном случае твой редактор показывает на примере, что шрифты берутся не сами по себе, за их появлением на экране прячется целая структура, которую надо бы понимать. Я сейчас не имею в виду сборщиков игр посредством движков, а именно начинающих программистов, пытающихся набрать опыт на создании игр.

Хочу отметить несколько вещей, просто так, чтобы поддержать разговор, ...ну, и на вопросы ответить.

Цитата:
Сообщение от Ulex
Ну это у тебя так сделано. А кто нибудь будет хранить шрифт одной общей текстурой. И как бы дело хозяйское. Метрика должна быть по вохможности универсальная и не привязанная к методам рисования и обработки bitmap_ов или текстур. Не хотите хранить одной картой, да бога ради, храните в массиве кусочками. Это у тебя картинка однострочная и все символы фактически одной высоты. Да и с точкой, определяющей символ тоже геморрой, наверное, тот ещё был. Ты их руками проставлял, или фотошоп это как то автоматизировал? Я тогда перефразирую вопрос, а если шрифт будет такой, как твоя программа его нарежет на кусочки?
Встречный вопрос: ты же тоже в редакторе наделал полей и вписываешь параметры вручную для каждого символа?
Разумеется, я вручную проставил трассировку, только воспользовался уже готовым редактором, и решил убить двух зайцев одним выстрелом, упаковав в текстуру и кодированные данные. Собственно, редакторы шрифтов существуют только потому, что у каждого типа проекта/движка могут быть свои правила хранения и представления шрифтов, нарушать которые не следует, вот создатели и сотворили редактор, иначе это был бы один принцип и один и тот же редактор на все времена.

Что хочу заметить. В своем методе я постарался уменьшить объем памяти сборной текстуры, именно поэтому по ширине символы занимают ровно столько пикселей, сколько им нужно. В текстуре полный набор символов, все те, что могут быть напечатаны с клавиатуры, включая пробел. Формат PNG, весь ненужный альфа-канал пакуется. Итого Verdana 12-й кегель (17 пкс высоты) 161 символ - 7,65К в ОЗУ после загрузки естественно больше, в районе 96,8К, особых чудес не бывает с растрами, и это полный набор.

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

Цитата:
Сообщение от Beermonza
Встречный вопрос: ты же тоже в редакторе наделал полей и вписываешь параметры вручную для каждого символа?
Конечно. Ну как бы на то он и редактор, чтобы человек в нём руками чего-то редактировал. Вообще я хотел сделать что-то более менее универсальное. Чтобы любой программист мог взять любую картинку шрифта, нарезать её на кусочки, привязать их к символам и получить такой файл соответствия, имея который совсем несложно загрузить и отрисовать этот шрифт без привязки к какому-либо движку и даже вообще графической библиотеке. Хотите на GDI рисуйте, хотите на DX. Хотите одним куском текстуру храните, хотите массив текстур. Метрика вас ни к чему не обязывает, она просто может помочь загрузить шрифт, не производя никаких дополнительных вычислений на этапе загрузке. Понятно что можно сразу картинку подогнать под определённые правила и тогда этот файл метрики будет не нужен. Но тогда картинка должна будет соответствовать этим правилам. А редактировать картинку подчас сложнее, чем даже hex файл.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 13.02.2011, 18:47   #18
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию Final release

Финальная версия.
Добавлено:
-сдвиги символов слева и сверху. Конечная структура метрики теперь выглядит так:
Цитата:
metrik STRUCT
SymA db ? ; символ №1, соответствующий региону left-bottom
SymB db ? ; символ №2, соответствующий региону left-bottom
ShiftL db ? ; сдвиг символа слева
ShiftU db ? ; сдвиг символа сверху
left dw ? ; координаты региона символа
top dw ? ; координаты региона символа
right dw ? ; координаты региона символа
bottom dw ? ; координаты региона символа
metrik ENDS
-автоматическая нарезка регионов (кнопка "разбить"). В качестве цвета фона берётся цвет верхней левой точки картинки. Режим сильно и не тестировал. Распознавания символов естественно нет - это в любом случае надо будет делать руками.

-добавлена возможность выгрузить индексированную метрику. Тут надо пояснить что это такое и зачем. Для ускорения отрисовки текста в начало файла метрики добавляется таблица смещений. Таблица состоит из 256 элементов типа WORD. Каждое слово этой таблицы содержит смещение на сруктуру imetrik в этом же файле. Связь кода символа и региона получается однозначной. Код символа - это индекс в таблице смещений. Берём из таблицы смещений элемент с порядковым номером кода символа - он содержит смещение в байтах от базового адреса файла метрики на структуру:
Цитата:
imetrik STRUCT
ShiftL db ? ; сдвиг символа слева
ShiftU db ? ; сдвиг символа сверху
left dw ? ; координаты региона символа
top dw ? ; координаты региона символа
right dw ? ; координаты региона символа
bottom dw ? ; координаты региона символа
imetrik ENDS
По этому смещению получаем структуру, рисуем символ, всё.
Вложения
Тип файла: rar formFontMetr.rar (29.6 Кб, 9 просмотров)
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками 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