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) 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
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
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í.
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.
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
|