Архив за септември, 2009

Ai, ai, Captain!

септември 22, 2009

Facebook периодично споделя, че поддържа 65 езика. Лесно може да се смени текущият език, от линка най-долу в ляво на страницата, където е изписан текущият. Значително по-малко известен е фактът, че един от възможните преводи е English (Pirate)!

Pirate!

В резултат почти всички текстови стрингове се превеждат на една доста по-интересна вариация на английския.

Picture 1.png

Друг интересен език е English (Upside Down), който буквално преобръща представите за света:

Picture 2.png

OpenGL и рендериране на текст, Част 1

септември 20, 2009

OpenGL няма вградена поддръжка на шрифтове. Ситуацията е подобна на тази с кривите линии, кръговете и редица други тривиални неща, които отсъстват напълно. Тулкитът предоставя нужната функционалност за имплементация на шрифтове, но всеки трябва да се справя сам с конкретното имплементиране.

Разбира се, шрифтовете и тяхното рендериране са нещо, което е необходимо твърде често, за това и съществуват множество имплементации под формата на библиотеки или просто хедъри. За това в този и няколко следващи поста ще споделя опитът си с няколко от тях под Mac OS X и спецификите, с които съм се сблъсквал.

Няколко думи за самата техника на изобразяване.

Основното, разбира се, е да се опишат символите, представляващи шрифта – глифове – във вид, удобен за работа с OpenGl. Трите групи на§ини това да стане са:

  • Растерно изобразяване – чрез glBitmap или glDrawPixels. Неудобното е, че при такъв тип изобразяване не могат да се използват матричните трансформации (glTranslate, glRotate, glScale). Също така не е най-удачно от гледна точка на performance.

  • Геометрично изобразяване – Глифовете се построяват чрез геометричните примитиви – GL_LINES, GL_TRIANGLES, GL_QUADS. Използват се матричните трансформации. Предимство, спрямо растерните, е, че няма проблем изобразяваният текст да се съобразява с осветеност, както и използването на нормалните матрични трансформации.
  • Текстурно изобразяване – Относително най-разпространеният метод за изобразяване на текст. Предварително се създава една текстура, съдържаща всички глифове от шрифта. След това се мапват регионите съдържащи конкретно интересуващия ни символ. С текста лесно се борави като с текстура. Недостатък е, че за промяна, неосъществима с текстурни трансформации трябва да се създаде нова текстура, с изменени глифове.

    На мен, конкретно, за текущите ми нужди, най-добра работа върши геометрично изобразения текст. Лесно мога да деформирам низът, който изобразявам, да изменям цветове, форми и т.н.

    Подготовка на глифовете

    След като се избере начин за изобразяване на глифовете, следва да се набавят самите те. Начини за това има много. Ако се използват текстури е доста лесно да се създаде нужната текстура, чрез инструмент за обработка на изображения, като GIMP или пък с Mac OS-овския Quartz, като се използват шрифтове от операционната система.

    Растерното и геометрично изобразяване, обаче, се явяват по-сериозен проблем. По някакъв начин трябва да се опишат формите и контурите на символите. Едно решение е да си измислим собствен шрифт, който да опишем символ по символ. Но това би бил много труд, който в голяма част от случайте би бил целесъобразен. Далеч по-лесно би било по някакъв начин да се използват готови шрифтове, като тези, които идват с операционните системи (повечето).

    Тук се оказва, че качественото и правилно превръщане на векторните шрифтове (каквито са скалируемите шрифтове, които се срещат най-често) в растерно представяне, което да се изобрази на екрана. Това е тежка задача, за която са нужни никак не малко усилия. Тук на помощ ни идва една изключително мощна софтуерна библиотека: FreeType, която е дефакто стандартният начин за изобразяване на шрифтове в свободния свят. Чрез нея може съвсем лесно да се представят повечето шрифтови формати – TrueTypeFont, Type1, OpenType и д.р.

    Същинско изобразяване

    След като вече имаме инфорамция за контурите на символите от шрифта, остава да я изобразим на екрана с примитивите, предоставени от OpenGL. Това би могло да бъде относително лесно, ако е нужна строго специфична функционалност, но постепенно се превръща в отделен проект, сам по себе си, ако са нужни повече възможности, като различни техинки на изобразяване, оптимизации и улеснения (например display list) и д.р. А това също става ненужно усложнение, тъй като може да се използва и/или нагоди някой от съществуващите проекти за рендериране на текст в OpenGL, за които ще стане дума в следващата част.

  • MarsEdit – Mac OS desktop blogging

    септември 18, 2009

    За трети път правя опит да стана блогер. След като наскоро почнах да използвам Desktop Notification за Facebook реших да си намеря подобен инструмент, с който да си човъркам wordpress-a без да отварям страници, да ходя по линкове и т.н.
    Резултатът е Mars Edit – (платено) native Mac OS X приложение, което се интегрира напълно елементарно с blog-ът ми. Всъщност, посика единствено адрес, потребителско име и парола, след което ми даде списъче с темите, които съм писал.

    Притежава доста приятен интерфейс за нови постове с live preview, Media Uploader, drafts, въобще всичко, което за сега смятам, че би било нужно за бързо и лесно писане на постове:
    Picture 3.png


    Follow

    Get every new post delivered to your Inbox.