|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
12.02.2013, 13:59 | #1 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Свободная трансформация шрифтов
Откуда растут ноги
Пишу векторный-графический редактор (чёта типа AutoCAD). Ну как пишу... В основном пока в уме, конечно. Это конечно не AutoCAD, но некоторые его возможности должны быть реализованы. Вчастности изометрическое/перспективное отображение объектов. В том числе и текста, разумеется. Пошукал тему по трансформации шрифтов, ничего интересного кроме "любого угла наклона" не нашел, и то только для TrueType шрифтов. Но кроме таких вкусностей, как вывода в изометрии, требуется еще и банальные на первый взгляд вещи, например получение ссылки на объект (вчастности на объект хранящий текст) по указаному пикселю на канве. Подумал конечно о OpenGL и DirectX, но есть несколько НО. И моя некомпетенция в вопросах 3D далеко не первое НО, поверте. Вот примерный перечень ограничений: - сложности соблюдения стандартов СПДС - отсутствие некоторых специфических эффектов (а точнее сложность их реализации на OGL и DX) - ограничения по кросплатформиности (пишу на Lazarus'е и всю геометрию реализую на уровне процессора) - что делать с простыми 2D чертежами (на писать же для них отдельный движок, хотя как знать) - отсутствие знаний соответствующих технологий (поверте, это был бы самый легкоустронимый недостаток) Так что использование OpenGL и DirectX я исключил. Это можно оставить только для возможностей быстрого рендеринга. Остается только один вариант - расчленить символы на примитивы и юзать линии, дуги и солиды. Уж их-то отобразить в изометрии труда не составит. Вопрос Как расчленить на примитивы или свободно трансформировать шрифт. Какие для этого есть инструменты и библиотеки. Безымянный.jpg Примечание Замечания к разделу "Откуда растут ноги" тоже принимаются. Буду рад любым конструктивным замечаниям и предложениям. Последний раз редактировалось Sibedir; 13.02.2013 в 06:54. |
13.02.2013, 19:33 | #2 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
1. OpenGL вполне себе кроссплатформенный. Т.е. если требование кроссплатформенности исключает из рассмотрения DirectX, то с OpenGL ситуация другая.
2. TrueType, да и вообще все векторные шрифты вполне могут быть расчленены на примитивы. Что жек касается растровых шрифтов, то, во-первых, следует отдавать себе отчет, что их перспективное отображение неизбежно будет сопровождаться нежелательными артефактами (в силу самой природы растровых шрифтов). А в-вторых, для из отображения используется такая же методология, что и для отображения текстур, поэтому искать нужно именно по этому словосочетанию. |
14.02.2013, 07:06 | #3 | ||||
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Цитата:
Но тем не менее, так OpenGL не умеет 1.JPG Это изометрическое изображение некой детали с отрисовкой невидимых линий Или такое 2.JPG Это тоже самое, но для двух деталей и с указанием глубины прорисовки невидимых линий. Утрированно, конечно, но нечто подобное частенько требуется на чертежах. Жутко напрягает, когда за отображение невидимых линий приходится самому заботиться. ---------------------------------------------------------------------------------------------------------------- Цитата:
---------------------------------------------------------------------------------------------------------------- Цитата:
---------------------------------------------------------------------------------------------------------------- Цитата:
1. Нарисовали его в квадратике 2. Исказили квадратик в соответствии с текущими параметрами просмотра (точки наблюдения. угла обзора, если это перспектива) 3. Отрисовали квадратик на холсте с использованием маски прозрачности Каждую из этих задач в отдельности я уже решал. Не думаю, что возникнут проблемы с их реализацией в комплексе. Но вот для векторных шрифтов (TTF, SHX) это не подходит. С SHX-шрифтами всё просто. Формат SHX довольно прост, я бы сказал примитивен. Но как же TTF расшрифтовать-то? Нашел вроде бы инфу по формату ( http://www.microsoft.com/typography/...sOverview.mspx ), но жутко не хочется писать модуль. Надеялся, что есть какие-то готовые подходящие решения. |
||||
14.02.2013, 08:10 | #4 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
что именно огл не умеет? рисовать штриховкой? умеет.
а определять золны видимости вам все равн самим. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
14.02.2013, 12:31 | #5 | |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Цитата:
У меня же методика по дикому простая (я бы сказал тупая): 1. Выбираем грани повёрнутые нормалью к камере 2. Эти грани сортируются по удаленности от камеры 3. Рисуем от дальней к ближней (рёбра сплошные) (эти три этапа OGL сделает в разы быстрее) 4. Рисуем весь каркас (только рёбра) прерывистой линией поверх уже нарисованного. На Lazarus'е вот этот код Код:
Надо будет дома с Делфи сравнить. Я что-то подобное уже делал, работало гораздо шустрее. ... М-м-мда, видимо придется всё-таки на OpenGL. Разобъём задачу на 2 части: 3D-моделирование и оформление чертежей. Тогда в 3D для моей задачи шрифты нафиг не нужны. Последний раз редактировалось Sibedir; 14.02.2013 в 13:56. |
|
14.02.2013, 19:01 | #6 | ||||
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Цитата:
Могу посоветовать осуществлять вывод в два этапа 1. Сначала стилем предназначенным для невидимых линий рисуется объект без отсечения невидимых граней (либо с инверсией выбираемых граней). 2. А поверх - стилем, предназначенным для видимых линий - с отсечением. Цитата:
Цитата:
Цитата:
|
||||
14.02.2013, 19:24 | #7 | ||
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Цитата:
Цитата:
|
||
15.02.2013, 06:01 | #8 | ||
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Цитата:
Цитата:
Кстати дома на Делфи скорость в 3 раза выросла (комп немного мощьнее). Короче я уже сказал, пока шрифты в баню, делим задачу на два направление (модель/чертеж), занимаемся OpenGL. Надо же было когда-то этим заняться. |
||
15.02.2013, 08:06 | #9 | ||
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Цитата:
Цитата:
Тут одна сортировка тысяч элементов по удаленности отнимает значительное время. А этого можно избежать. |
||
15.02.2013, 08:27 | #10 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Нет, s-andriano, я не пропустил мимо ушей. Я вас прекрасно понял и про сортировку по Z и про алгоритм художника. Если нарисовать ВСЕ грани с положительной нормалью по алгоритму художника, а после нарисовать все рёбра пунктиром, то получится то, что мне нужно. Про это
тоже понял. Для моей задачи не критично. Критичны 2 противопоставленных фактора: - скорость работы алгоритма геометрии и механизмов вывода проекции на канву - время затраченное на разработку При этом еще требуется некая условность (схематичность) вывода. Для разрешения дилеммы придется получить допсведения о механизмах реализации графики на огл и уточнить возможную сложность графических объектов (есть возможность разбить модель на подсхемы, а при выводе всей модели отображать некоторые детали схематично). Это всё уже другая тема. Вопрос был в основном по шрифтам, но и за эти замечания спасибо всем. Бывает что сам уходишь в дебри и нужен просто оклик со стороны. Последний раз редактировалось Sibedir; 15.02.2013 в 08:36. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Свободная таблица | Wind-up Bird | Microsoft Office Access | 5 | 03.05.2012 12:49 |
Свободная память | fAttyboy | Операционные системы общие вопросы | 6 | 25.09.2011 21:17 |
Свободная память диска А | vgikys1 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 0 | 03.07.2010 22:14 |