Отрисовка TrueType контуров
Модератор: Модераторы
Отрисовка TrueType контуров
Здравствуйте.
Знает ли кто-нибудь, как рисовать контуры символов, которые прочитаны из файлов ttf? Я считал точки из файла, определит какие точки на кривой, какие вне кривой, и построил кривые Безье, как написано в википедии, но символ явно не так выглядит, круг не круглый, овал не овальный, такое впечатление, что точки вне кривой должны стоять не там.
Знает ли кто-нибудь, как рисовать контуры символов, которые прочитаны из файлов ttf? Я считал точки из файла, определит какие точки на кривой, какие вне кривой, и построил кривые Безье, как написано в википедии, но символ явно не так выглядит, круг не круглый, овал не овальный, такое впечатление, что точки вне кривой должны стоять не там.
ЕМНИП там для нескольких подряд идущих точек "не на кривой" вычисляются "средние" точки "на кривой" т.е. кривые всегда квадратичные.
Моя аналогичная тема http://forum.lazarus.freepascal.org/ind ... 980.0.html картинки там насколько помню видно только зарегистрированным пользователям.
Моя аналогичная тема http://forum.lazarus.freepascal.org/ind ... 980.0.html картинки там насколько помню видно только зарегистрированным пользователям.
Sasha писал(а):Здравствуйте.
Знает ли кто-нибудь, как рисовать контуры символов, которые прочитаны из файлов ttf? Я считал точки из файла, определит какие точки на кривой, какие вне кривой, и построил кривые Безье, как написано в википедии, но символ явно не так выглядит, круг не круглый, овал не овальный, такое впечатление, что точки вне кривой должны стоять не там.
А как читаете файлы, напрямую или FreeType используете?
zub писал(а):ЕМНИП там для нескольких подряд идущих точек "не на кривой" вычисляются "средние" точки "на кривой" т.е. кривые всегда квадратичные.
Моя аналогичная тема http://forum.lazarus.freepascal.org/ind ... 980.0.html картинки там насколько помню видно только зарегистрированным пользователям.
Спасибо буду ковырять в этом направлении. На самом деле странно, неужели нельзя было сразу такие точки записать, чтобы количество расчётов было минимальным, а так для отображения лишние вычисления.
Добавлено спустя 6 минут 3 секунды:
Mikhail писал(а):Sasha писал(а):Здравствуйте.
Знает ли кто-нибудь, как рисовать контуры символов, которые прочитаны из файлов ttf? Я считал точки из файла, определит какие точки на кривой, какие вне кривой, и построил кривые Безье, как написано в википедии, но символ явно не так выглядит, круг не круглый, овал не овальный, такое впечатление, что точки вне кривой должны стоять не там.
А как читаете файлы, напрямую или FreeType используете?
Читаю файлы напрямую. Мне нужны только точки символов, а для этого можно обойтись одним модулем.
Это формат хранения на диске, никто не мешает преобразовать данные из ttf в более подходящие для отображения
>>читаю файлы напрямую. Мне нужны только точки символов, а для этого можно обойтись одним модулем.
в лазаре есть штатные средства для чтения ttf
>>читаю файлы напрямую. Мне нужны только точки символов, а для этого можно обойтись одним модулем.
в лазаре есть штатные средства для чтения ttf
zub писал(а):в лазаре есть штатные средства для чтения ttf
С них я и начал, но они слишком навороченные для такой простой задачи как вытаскивание точек символа.
Спасибо zub`у за сылку, сделал как там написанно и всё нормально отрисовывается.
Eсть. components\lazutils\easylazfreetype.pas
Я из easylazfreetype вытягиваю контуры, с помощью glu триангулирую их и рисую
Я из easylazfreetype вытягиваю контуры, с помощью glu триангулирую их и рисую
glu триангуляцию умеет делать, блин, а я сам триангулятор делал, но всё равно не так уж это и плохо, зато всё в одном файле без сторонних библиотек.
Добавлено спустя 6 минут 44 секунды:
По поводу контуров. FPC-шная библиотека даёт точки для сглаженых контуров или она даёт только опорные точки?
Добавлено спустя 6 минут 44 секунды:
zub писал(а):Eсть. components\lazutils\easylazfreetype.pas
Я из easylazfreetype вытягиваю контуры, с помощью glu триангулирую их и рисую
По поводу контуров. FPC-шная библиотека даёт точки для сглаженых контуров или она даёт только опорные точки?
easylazfreetype выдает тоже самое что есть в ttf - набор точек с атрибутами "на кривой"\"не на кривой". токже умеет отрисовывать глифы, в том числе с антиалиасингом (см. lazarus\examples\lazfreetype). но пользовать его для рисования я не пробовал.
>>glu триангуляцию умеет делать, блин, а я сам триангулятор делал,
glu умеет и триангуляцию и тесселяцию, правда для тесселяции идущий в составе винды glu32.dll не очень подходит - я использую месавский
>>но всё равно не так уж это и плохо, зато всё в одном файле без сторонних библиотек.
Если получился надежный и быстрый триангулятор почему бы не выложить исходники?
>>glu триангуляцию умеет делать, блин, а я сам триангулятор делал,
glu умеет и триангуляцию и тесселяцию, правда для тесселяции идущий в составе винды glu32.dll не очень подходит - я использую месавский
>>но всё равно не так уж это и плохо, зато всё в одном файле без сторонних библиотек.
Если получился надежный и быстрый триангулятор почему бы не выложить исходники?
-
Mirage
- энтузиаст
- Сообщения: 881
- Зарегистрирован: 06.05.2005 20:29:07
- Откуда: Russia
- Контактная информация:
zub писал(а):easylazfreetype выдает тоже самое что есть в ttf - набор точек с атрибутами "на кривой"\"не на кривой". токже умеет отрисовывать глифы, в том числе с антиалиасингом (см. lazarus\examples\lazfreetype). но пользовать его для рисования я не пробовал.
А, т.е. она таки не выдает то, что можно отрисовать. Нужен какой-то процессинг.
И тем не менее может сама рисовать, т.е. поди тянет еще кучу ненужных зависимостей?
Пичалька...
В ней есть свой растеризатор, как он работает я не вдавался в подробности. Зависимостей насколько я понимаю никаких нет, всё написано паскале и с виду является портом сишного кода, видимо FreeType.
>>А, т.е. она таки не выдает то, что можно отрисовать. Нужен какой-то процессинг.
А что хотим рисовать? если растр - изучаем встроенный растеризатор. Если вектор - вот набор точек безье кривых... Что может понадобиться еще?
>>Пичалька...
Вовсе нет, всё прекрасно работает
>>А, т.е. она таки не выдает то, что можно отрисовать. Нужен какой-то процессинг.
А что хотим рисовать? если растр - изучаем встроенный растеризатор. Если вектор - вот набор точек безье кривых... Что может понадобиться еще?
>>Пичалька...
Вовсе нет, всё прекрасно работает
-
Mirage
- энтузиаст
- Сообщения: 881
- Зарегистрирован: 06.05.2005 20:29:07
- Откуда: Russia
- Контактная информация:
zub писал(а): Зависимостей насколько я понимаю никаких нет
zub писал(а):А что хотим рисовать? если растр - изучаем встроенный растеризатор. Если вектор - вот набор точек безье кривых... Что может понадобиться еще?
Рисовать хотим буквы полигонами. Но насколько я понял из вышеприведенной дискуссии, набор точек нужно обработать, получить в результате еще точки и потом уже можно рисовать.
>>набор точек нужно обработать, получить в результате еще точки и потом уже можно рисовать.
Набор полигонов для буквы размером 10 пикселов и "пол экрана" должен чуток различаться - поэтому аппроксимация безье и последующая триангуляция логично ложится на плечи програмиста.
В ттфе нет полигонов, только безье контуры, А вот либа позволяющая вытащить из ттфа "кривые, чтобы их осталось только отрисовать" в FPC есть))
Набор полигонов для буквы размером 10 пикселов и "пол экрана" должен чуток различаться - поэтому аппроксимация безье и последующая триангуляция логично ложится на плечи програмиста.
В итоге, для FPC есть либа, позволяющая вытащить из TTF кривые, чтобы их осталось только отрисовать?
В ттфе нет полигонов, только безье контуры, А вот либа позволяющая вытащить из ттфа "кривые, чтобы их осталось только отрисовать" в FPC есть))
