Moravské přístroje, a. s., zdroj: https://www.mii.cz/art?id=1144&lang=405, vytištěno: 14.10.2024 22:40:21

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

Grafika v panelech systému Control Web
 Jaký typ panelu mám ve své aplikaci použít? Co jsou to vykreslovače grafiky a jak jejich volba ovlivní moji aplikaci? Není sice bezpodmínečně nutné se těmito otázkami zabývat, velmi dobrou aplikaci lze vytvořit i bez toho, ale možnosti zlepšení vzhledu a zvýšení grafického výkonu za to občas stojí. Zdá se, že tady ani není nad čím přemýšlet, tvorba téměř každé aplikace začíná tak, že z palety vytáhneme panel a začneme do něj vkládat přístroje ...

Programové prostředí Control Web přináší svým aplikacím skvělé a v mnohých ohledech výjimečné možnosti grafického zobrazení. Systém jako první přinesl do průmyslové automatizace 3D grafiku a nyní umožňuje i využití virtuální i rozšířené reality. Viditelné virtuální přístroje mohou být umístěny buď přímo na pozadí pracovní plochy Windows nebo v některém kontejneru, kterým může být 2D panel, 3D panel nebo 3D scéna (virtuální přístroje panel, gl_panel, gl_scene).

Druhy panelů pro zobrazování virtuálních přístrojů

Virtuální přístroje mohou být vloženy do panelů, v rámci kterých se mohou kreslit, skrývat, zoomovat a pohybovat po obrazovce:

  • panel — v tomto kontejneru má každý virtuální přístroj vymezený vlastní obdélníkový region, do kterého se vykresluje a jehož okraje kresba nemůže překračovat.

    Control Web disponuje jednou unikátní vlastností — každý aplikační program s přístroji ve standardních 2D panelech může pro své zobrazování jednoduše přepínat mezi používáním několika grafických aplikačních rozhraní.

    Srovnání vykreslení klasického 2D virtuálního přístroje pomocí vykreslovačů GDI, Direct2D a OpenGL (dvojnásobně zvětšeno)

    Srovnání vykreslení klasického 2D virtuálního přístroje pomocí vykreslovačů GDI, Direct2D a OpenGL (dvojnásobně zvětšeno)

    Tato schopnost je dosažena díky abstrakci grafiky, která odstraňuje závislost virtuálních přístrojů na konkrétním grafickém aplikačním rozhraní ( API - Application Programming Interface ) operačního systému. Tzv. vykreslovač ( Renderer ), je objekt, který zajišťuje jednotný přístup k různým grafickým API dostupným v operačním systému. Virtuální přístroje se tak již nemusejí starat o specifické vlastnosti a omezení jednotlivých grafických rozhraní. Pro standardní 2D panel si můžeme prostřednictvím parametru graphics_mode zvolit jeden z těchto vykreslovačů:

    • gdi — klasické grafické rozhraní Windows GDI ( Graphics Device Interface ) s celočíselnými souřadnicemi. Výsledky grafických operací jsou zapisovány přímo do obrazovkové paměti. GDI lze považovat za již poněkud nemoderní, ale pro některé úlohy, jako jsou např. tabulky, číslicové zobrazovače nebo editační boxy, může být stále tou nejlepšií volbou.

      • přednosti — vždy funguje s veškerými grafickými adaptéry, kvalitní fonty, pracuje i bez monitoru na virtuálních strojích

      • nedostatky — pomalost, celočíselná zubatost, blikání, chybné vykreslování průhledných objektů, jen 2D grafika, není možno plynule zmenšovat a zvětšovat obraz

    • gdi_off_screen — pomocí funkcí GDI je kresba zapisována do paměti a poté je hotový obrázek přenesen do obrazovkové paměti. Tak je eliminováno rušivé blikání i problémy s pořadím vykreslování a tím i nesprávným překrýváním při použití průhledných virtuálních přístrojů.

      • přednosti — řeší problémy GDI s blikáním a s vykreslováním průhledných objektů

      • nedostatky — pomalost, zubatost, jen 2D grafika, není možno plynule zmenšovat a zvětšovat obraz

    • gdi_plus — zde jsou již používány souřadnice s plovoucí řádovou čárkou. Aplikační rozhraní tvoří přímo třídy jazyka C++. Vše je řešeno kódem pro CPU ( Central Processing Unit ), proto grafický výkon není zrovna závratný. Grafika je ale kvalitní s vyhlazenými čarami a obrysy.

      • přednosti — oproti GDI navíc vyhlazená kvalitní grafika, možnost plynule zmenšovat a zvětšovat obraz

      • nedostatky — pomalost, jen 2D grafika

    • direct2d — grafické rozhraní, které využívá systém Direct3D. Vektorová grafika je ale ze značné části řešena softwarovou rasterizací pomocí CPU.

      • přednosti — kvalitní grafika, částečná akcelerace v GPU, možnost plynule zmenšovat a zvětšovat obraz

      • nedostatky — jen 2D grafika

    • opengl — otevřené grafické rozhraní, které je používáno řadou operačních systémů od mobilní telefonů až po výkonné počítače. Grafické služby jsou prostřednictvím ovladačů podporovány vždy jednotlivými výrobci grafických karet a grafických procesorů. Odtud plyne maximální akcelerace pomocí grafických procesorů a rychlých grafických pamětí. Výhodou je i programovatelnost grafických procesorů ( GPU - Graphics Processing Unit )

      • přednosti — vysoký výkon, kvalita obrazu, akcelerace pomocí GPU, 2D i 3D grafika, možnost plynule zmenšovat a zvětšovat obraz

      • nedostatky — nedostupnost pokročilých funkcí na některých grafických adaptérech, nutný připojený monitor ( stačí ), nelze emulovat na virtuálních strojích

    Volba vykreslovače může velmi významně přispět ke kvalitě vytvořeného aplikačního programu. Proto je vždy dobré vědět, jaké jsou přednosti i nedostatky jednotlivých grafických rozhraní a proč si volíme právě určitý vykreslovač.

  • gl_panel — tento panel je vykreslován prostřednictvím OpenGL a celá jeho plocha je jediným vykreslovacím kontextem, který je sdílen všemi vloženými virtuálními přístroji. Vše je zobrazováno v orthografické projekci, každý přístroj má svůj obdélníkový region, takže se s tímto panelem pracuje stejně jako s klasickým 2D panelem. Přístrojům lze definovat i jejich pozici v hloubkové Z souřadnici a tím přesně definovat jejich překrývání. Lze používat veškeré virtuální přístroje, které se při změnách velikosti panelu proporčně zoomují.

  • gl_scene — rovněž scéna pracuje s jedním OpenGL vykreslovacím kontextem a i do ní lze vkládat všechny typy virtuálních přístrojů. Hybridní a prostorové přístroje lze vkládat do libovolného místa prostoru v libovolné pozici a měřítku. V prostoru scény je možno se volně pohybovat. Volný pohyb kamery ve scéně lze v případě potřeby omezit a kameru lze řídit v aplikaci programově. Pomocí zorného úhlu kamery lze nastavovat perspektivu projekce a lze zvolit i projekci ortografickou. Scéna se tak stává nejuniverzálnějším kontejnerem s virtuálními přístroji. Scéna rovněž dokáže generovat stereografický obraz pro použití v náhlavních sadách pro virtuální a rozšířenou realitu.

    Obsah scény je vykreslován jinak — grafika celého obsahu scény je uspořádána do stromové hiearchické struktury skupin. Na jednotlivé skupiny jsou v kontextu jejich hierarchie aplikovány prostorové transformace. To umožnuje řešení veškerých animací i volný pohyb všech skupin v prostoru scény.

Typy virtuálních přístrojů podle způsobu vykreslování

Ani virtuální přístroje nejsou v přístupu ke grafickým funkcím všechny stejné. Podle způsobu vykreslování své podoby můžeme rozlišovat tři typy virtuálních přístrojů:

  • tradiční 2D — tyto přístroje využívají mechanismů, které jsou používány pro grafické uživatelské rozhraní aplikací v operačním systému Windows. Každý přístroj se vykresluje ve vlastním obdélníkovém regionu obrazovky, který nemůže přesahovat. Region je definován celočíselnými souřadnicemi s počátkem v levém horním rohu panelu nebo obrazovky. Omezení GDI grafiky, jako jsou např. celočíselné souřadnice a "zubatost" čar a šikmých okrajů, mohou být překonávány použitím pokročilejších vykreslovačů systému Control Web

  • hybridní — hybridní přístroje využívají pokročilou vektorovou 2D grafiku a mohou být umísťovány jak do plochy 2D panelů, tak i do prostoru 3D scény. Grafika těchto přístrojů je rozdělena do hierarchické stromové struktury tzv. skupin ( groups ), kdy na jednotlivé uzly těchto struktur lze aplikovat obecné prostorové obrazové transformace. Tyto transformace pak ovlivňují i vyhodnocování aktivity myši nad aktivními povrchy těchto přístrojů.

    Hybridní přístroje mohou být umístěny do libovolného místa prostoru scény, zde vedle sebe hybridní a 3D virtuální přístroj

    Hybridní přístroje mohou být umístěny do libovolného místa prostoru scény, zde vedle sebe hybridní a 3D virtuální přístroj

  • prostorové — povrchy trojrozměrných přístrojů jsou definovány nikoliv barvou, ale materiálem, který reaguje na světlo, dopadající pod určitým úhlem. Díky tomu vypadají přístroje bezkonkurenčně působivě. 3D přístroje jsou použitelné jak v orthografickém zobrazení v 2D panelu, tak i v prostoru scény a dokonce i v prostředí virtuální a rozšířené reality.

Všechny typy přístrojů společně v jednom panelu s OpenGL vykreslovačem

Všechny typy přístrojů společně v jednom panelu s OpenGL vykreslovačem

Vykreslování písma

U vykreslovačů od GDI po Direct2D je to s písmy jednoduché. Microsoft ve své grafice samozřejmě podporuje vlastní technologii vykreslování písma včetně barevného vyhlazování ClearType. V prostředí OpenGL dobře funguje tesselace vektorových písem do trojúhelníků prostorových objektů. Podpora bitmapových písem je spíše legrační a podpora rasterizace vektorového písma je nulová. Proto má OpenGL vykreslovač implementován FreeType rasterizer fontů ( FreeType písma se používají rovněž v operačním systému GNU Linux a variantách Unixu jako např. FreeBSD nebo NetBSD, v mnoha platformách pro chytrá zařízení jako např. Android, Tizen, RokuOS, iOS, ChromeOS, ReactOS i v grafických prostředích jaklo jsou Ghostscript a PostScript a používají je rovněž webové prohlížeče Chromium, WebKit, Gecko a Goanna ), který poskytuje vyhlazená písma výborné kvality a podporuje vektorové TrueType i OpenType fonty. Vyhlazování okrajů písem je ve stupních šedi nebo jedné barvy a není tak závislé na konfiguracích barevných bodů LCD obrazovek. Správa rasterizovaných fontů ve vykreslovači je hodně optimalizována na výkon a spotřebu paměti — přece jen při zoomování panelu musíme mít k dispozici hodně velikostí každého písma a je nutno také zajistit zobrazování obrovského množství jakýchkoliv znaků v UNICODE kódování.

FreeType písmo v OpenGL vyhlazené do stupňů šedi a ClearType v GDI využívající vodorovné RGB pořadí barevných subpixelů

FreeType písmo v OpenGL vyhlazené do stupňů šedi a ClearType v GDI využívající vodorovné RGB pořadí barevných subpixelů

TrueType písmo Tahoma v OpenGL a Direct2D vykreslovacím kontextu

TrueType písmo Tahoma v OpenGL a Direct2D vykreslovacím kontextu

Vykreslování prostorových přístrojů

3D přístroje mohou být umístěny v panelu s GDI vykreslovačem nebo i přímo na ploše pozadí Windows. V těchto případech si každý takto umístěný 3D přístroj vytvoří svůj vlastní vykreslovací kontext. Nejefektivněji se ale vykreslují v přístrojích panel s OpenGL vykreslovačem, gl_panel nebo gl_scene. Celá plocha těchto přístrojů je totiž jedním vykreslovacím kontextem.

Právě tato skutečnost je velmi důležitá. Má-li každý přístroj svůj vlastní vykreslovací kontext, nemohou být mezi přístroji sdíleny žádné grafické objekty, jakými jsou např. bitmapové obrázky, fonty, vektorová grafika, 3D modely atd. Také velké množství kontextů, kdy každý musí mít své vlastní buffery ( front a back buffer, Z buffer, stencil buffer ), své shadery a mnoho dalších objektů značně spotřebovává grafickou paměť. Naopak ve sdíleném kontextu je vše sdíleno. Jednotlivé kontexty rovněž nemohou být transparentní a přístroje se tak nemohou překrývat.

3D virtuální přístroje z v GDI panelu - každý přístroj má svůj vykreslovací kontext a ten nemůže být transparentní

3D virtuální přístroje z v GDI panelu - každý přístroj má svůj vykreslovací kontext a ten nemůže být transparentní

V panelu s OpenGL vykreslovačem je již vše v jediném sdíleném kontextu s jediným společným zdrojem osvětlení.

V panelu s OpenGL vykreslovačem je již vše v jediném sdíleném kontextu s jediným společným zdrojem osvětlení.

gl_panel poskytuje každému přístroji vlastní obdélníkový region v rámci společného sdíleného vykreslovacího kontextu. Kreslení navíc probíhá ve vlastním prováděcím toku a není tak zatěžován hlavní prováděcí tok aplikace.

gl_panel poskytuje každému přístroji vlastní obdélníkový region v rámci společného sdíleného vykreslovacího kontextu. Kreslení navíc probíhá ve vlastním prováděcím toku a není tak zatěžován hlavní prováděcí tok aplikace.

Zvláštním 3D přístrojem je gl_camera, která musí být umístěna v GDI panelu nebo přímo na pracovní ploše operačního systému. Má totiž nejen spoustu vlastních shaderů, ale také specifické mechanismy vykreslování, takže nemůže fungovat v rámci jiného než vlastního kontextu.

Hlavním smyslem OpenGL vykreslovacích kontextů je hardwarová akcelerace výkonu grafiky. Pro aplikaci tedy musí být dostupná fukčnost grafického procesoru. A protože např. virtuální stroje žádný grafický procesor nemají, provozovat tyto kontexty v softwarové emulaci nedává žádný smysl. Často ani v těchto případech nejsou dostupné potřebné grafické funkce.

RC