O společnostiProduktyObchodPodpora
Moravské přístroje
Hlavní stránka
O společnosti
Stažení software
Stažení dokumentů
Produkty
Control Web
Strojové vidění VisionLab
Kamery DataCam a osvětlovače DataLight
Průmyslový počítačový systém DataLab
Vědecké kamery
Speciální technika
Ceník
Aktivace produktů
Služby
Školení
Zakázková řešení
Podpora
Volba kamery a objektivu pro Strojové vidění
Control Web - Ukázkové aplikace

Hlavní stránkaProduktyProgramový systém Control WebČlánky

Vykreslování písma v OpenGL grafických kontextech
 Přesné, ostré a kvalitně vykreslené písmo již dávno považujeme za naprostou samozřejmost. Máme jej všude kolem sebe na obrazovkách svých telefonů a počítačů a jsme na něj zvyklí. Proč se tím tedy nyní zabývat. Nový update systému Control Web přináší v OpenGL vykreslovacích kontextech změnu ve vykreslování fontů. Někdo ti toho možná ani nevšimne, pro někoho ale může být tato nová technologie dost podstatná. Řeší totiž vykreslování při libovolné změně velikosti a proporcí panelů s udržením maximální ostrosti a pixelové přesnosti písma.

Kvalita písma v grafických kontextech, které používají Microsoftem oblíbená grafická rozhraní GDI, GDI+ a Direct2D, je velmi vysoká. Ostatně systém DirectWrite je stále považován za etalon kvality. Chceme-li ale využívat otevřené a široce multiplatformně rozšířené grafické API OpenGL, které, korektně řečeno, nemá firma Microsoft v přílišné oblibě, jsme postaveni před nutnost vyřešit vykreslování písma v minimálně v takové kvalitě, která je v současnosti všeobecně očekávána. A zde jsou nám výše jmenované technologie k ničemu, neboť tvůrce operačního systému Windows je do vykreslovacího systému OpenGL neimplementoval. Problémem bitmapových fontů pro OpenGL v rozhraní wgl není ani tak jejich prehistorická kvalita, ale několik závažných chyb v jejich implementaci, které velmi komplikují až prakticky znemožňují jejich použití. A vypadá to, že se můžeme spolehnout na to, že tyto chyby nebudou nikdy opraveny.

OpenGL vykreslovač v systému Control Web si každý font inicializuje ve dvou provedeních:

  • Písmo rasterizované do bitových map. Písmo je nejkvalitnější tehdy, když je vykresleno do výsledných obrazových bodů zobrazovacího panelu přesně tak, jak bylo do jednotlivých bodů rasterizováno. Proto každou velikost i deformaci znaků je lépe písmo rasterizovat samostatně.

  • Písmo vektorově tesselované do jednotlivých polygonů. Každý znak je uložen jako sekvence trojúhelníků. Každý vrchol trojúhelníků je v souřadnicích s plovoucí řádovou čárkou. Písmo tak lze z jedné podoby tohoto vektorového popisu vykreslovat ve velkém rozsahu velikostí. Tesselace je sice pomalejší, ale je dělána pouze jednou při prvotní inicializaci fontu. Písmo se vykresluje vektorově a jeho výsledná pixelová podoba na obrazovce je dána rasterizerem grafického procesoru. Písmo je stejně kvalitní ve všech prostorových transformacích, tj. ve všech velikostech, natočeních i perspektivních projekcích.

Pro rasterizaci písmen jsme využili systému FreeType. Do této knihovny byl ve spolupráci firem Google a Adobe vestavěn vyspělý rasterizer a technologie FreeType je nyní používána v operačních systémech Android, Chrome OS, iOS, GNU/Linux a v dalších variantách unixových operačních systémů, jako je např. FreeBSD a NetBSD. Kvalita rasterizace je opravdu vysoká a rasterizer je také velmi rychlý.

V OpenGL vykreslovači systému Control Web jsou obrazy písmen uloženy v rychlé paměti grafického procesoru. Vykreslování je pak nepřekonatelně rychlé a svým datovým tokem nijak nezatěžuje paměť a CPU.

Vnímání a posuzovaní grafické kvality písma je vždy hodně subjektivní a je věcí osobních preferencí. Někdo má raději měkčí okraje znaků. K takovým jedincům patřím i já, nicméně v našem vývojovém týmu drtivě převažuje poptávka po maximální ostrosti písma.

Obrázky jsou ve vašem prohlížečí zmenšené a tudíž nepřesné. Je nutno na ně kliknout, abychom je viděli přesně.

Jeden za základních TrueType fontů v základní velikosti kontextu, tedy bez zoomu. Ostřejší písmo vlevo je naše nové písmo v OpenGL kontextu, mírně rozmazanější písmo vpravo je rasterizováno systémem Microsoft DirectWrite a vykresleno v Direct2D kontextu.

Jeden za základních TrueType fontů v základní velikosti kontextu, tedy bez zoomu. Ostřejší písmo vlevo je naše nové písmo v OpenGL kontextu, mírně rozmazanější písmo vpravo je rasterizováno systémem Microsoft DirectWrite a vykresleno v Direct2D kontextu.

FreeType písmo může být rovněž libovolně barevné.

FreeType písmo může být rovněž libovolně barevné.

Srovnání FreeType písma antialiasovaného do stupňů šedi a ClearType v GDI využívající vodorovné RGB pořadí barevných subpixelů.

Srovnání FreeType písma antialiasovaného do stupňů šedi a ClearType v GDI využívající vodorovné RGB pořadí barevných subpixelů.

Dnes se již převážně upouští od antialiasingu, využívající RGB subpixely. Jednak na vodorovně lineární RGB uspořádání barev obrazových panelů se již dnes nedá spolehnout a tento systém také není použitelný při změně pozice obrazovky na šířku a na výšku.

Srovnání OpenGL a Direct2D kontextu se základní velikostí bez zoomu. Font v OpenGL je rasterizován a pozicován pro maximální ostrost.

Srovnání OpenGL a Direct2D kontextu se základní velikostí bez zoomu. Font v OpenGL je rasterizován a pozicován pro maximální ostrost.

Teď teprve přijdou ty největší potíže. Naše vykreslovací kontexty musíme plynule, tedy neceločíselně, zvětšovat a zmenšovat, a to i neproporčně. Přitom žádoucí je udržet maximální ostrost písma. Také pozice znaků musí plně respektovat bodový rastr zobrazovacího panelu.

Opět srovnání OpenGL a Direct2D, tentokrát uprostřed v základní velikosti, nahoře neproporčně zmenšený a rovněž dole neproporčně zvětšený (rozšířený) kontext.

Opět srovnání OpenGL a Direct2D, tentokrát uprostřed v základní velikosti, nahoře neproporčně zmenšený a rovněž dole neproporčně zvětšený (rozšířený) kontext.

Při změnách velikosti vykreslovacího kontextu musí být vždy rasterizována nová podoba písma. Jen tak lze udržet ostrost a bodovou přesnost.

Ke každému písmu dokáže OpenGL vykreslovač vytvořit jeho variantu pro obecné prostorové zobrazování. Každý znak je pak vektorovým modelem se souřadnicemi v plovoucí řádové čárce. Navíc znaku mohou být i extrudovány do zvolené hloubky a mohou tak lépe vypadat z některých směrů pohledu.

U vektorových reprezentací znaků je důležitým parametrem i přesnost tesselace - tedy to, kolika trojúhelníky jsou aproximovány obrysové křivky.

U vektorových reprezentací znaků je důležitým parametrem i přesnost tesselace - tedy to, kolika trojúhelníky jsou aproximovány obrysové křivky.

Prvotní vytvoření objektů znaků je pomalejší, než rasterizace. Proto je tato varianta písma vytváří až tehdy, kdy bude opravdu použita. Na druhé straně se tesselace provádí vždy jen jednou - veškeré velikosti jsou vykreslovány ze stejných objektů uložených v grafické paměti GPU.

Text je třírozměrný a může podléhat libovolným transformacím prostoru.

Text je třírozměrný a může podléhat libovolným transformacím prostoru.

Vektorové obrysové 3D písmo může být použito i u dvourozměrných grafických objektů

Vektorové obrysové 3D písmo může být použito i u dvourozměrných grafických objektů

Nové řešení správy písma je jednou z věcí, které jsou připravovány pro novou generaci systému Control Web, a které se nyní objevují i v update stávajících verzí tohoto systému.

rc

 
 | O společnosti | Produkty | Podpora | Stažení software | Stažení dokumentů | 
Moravské přístroje, a.s., Masarykova 1148, Zlín-Malenovice, 76302