Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Grafická knihovna OpenGL (1)

V této sérii článků popíšeme programovou grafickou knihovnu OpenGL, která dnes na většině platforem představuje standard pro tvorbu 2D a zejména 3D grafických aplikací. Každá vlastnost knihovny OpenGL bude popsána a předvenena na jednoduchém demonstračním programu. Pro tvorbu demonstračních příkladů byl zvolen programovací jazyk C, nicméně zde popsané vlastnosti a příkazy knihovny OpenGL lze použít v téměř jakémkoliv programovacím jazyce. Příklady byly odzkoušeny na platformách Linux/i386, SGI Irix a Windows XP, přičemž byl vždy použit překladač gcc.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

Základní informace o OpenGL

Knihovna OpenGLTM[1] [2][3] (Open Graphics Library) byla navržena firmou SGI (Silicon Graphics Inc.) jako aplikační programové rozhraní (Application Programming Interface – API) k akcelerovaným grafickým kartám resp. celým grafickým subsystémům. Předchůdcem této knihovny byla programová knihovna IRIS GL (Silicon Graphics IRIS Graphics Library). OpenGL byla navržena s důrazem na to, aby byla použitelná na různých typech grafických akcelerátorů a aby ji bylo možno použít i v případě, že na určité platformě žádný grafický akcelerátor není nainstalován – v tom případě se použije softwarová simulace. V současné době lze knihovnu OpenGL použít na různých verzích unixových systémů (včetně Linuxu a samozřejmě IRIXu), OS/2 a na platformách Microsoft Windows.

Logo OpenGL a název OpenGLTM je registrovaná známka firmy Silicon Graphics Inc.

Na některých platformách je možné rozdělení aplikace na dvě relativně samostatné části – serverovou a klientskou. Při vykreslování se potom jednotlivé příkazy (což jsou většinou parametry funkcí OpenGL) přenášejí přes síťové rozhraní. Knihovna OpenGL (narozdíl od IRIS GL nebo Direct 3D) byla vytvořena tak, aby byla nezávislá na použitém operačním systému, grafických ovladačích a správcích oken (Window Managers). Proto také neobsahuje žádné funkce pro práci s okny (otevírání, zrušení, změnu velikosti), pro vytváření grafického uživatelského rozhraní (Graphical User Interface – GUI) ani pro zpracování událostí. Tyto funkce lze zajistit buď přímo voláním funkcí příslušného správce oken, nebo lze použít některou z nadstaveb, například již dříve na ROOTovi popsanou knihovnu GLUT [4][5] (OpenGL Utility Toolkit). Pro dosažení co největší nezávislosti na použité platformě zavádí knihovna OpenGL vlastní primitivní datové typy, například GLbyte, GLint nebo GLdouble. Tyto typy a jejich použití budou podrobněji popsány v dalších dílech seriálu.

Programátorské rozhraní knihovny OpenGL je vytvořeno tak, aby knihovna byla použitelná v téměř libovolném programovacím jazyce. Primárně je k dispozici hlavičkový soubor pro jazyky C a C++. V tomto souboru jsou deklarovány nové datové typy používané knihovnou, některé symbolické konstanty (např. GL_POINTS) a sada cca 120 funkcí tvořících vlastní rozhraní. Existují však i podobné soubory s deklaracemi pro další programovací jazyky, například Fortran, Object Pascal či Javu; tyto soubory jsou většinou automaticky vytvářeny z Cčkovských hlavičkových souborů.

Z programátorského hlediska se OpenGL chová jako stavový automat. To znamená, že během zadávání příkazů pro vykreslování lze průběžně měnit vlastnosti vykreslovaných primitiv (barva, průhlednost) nebo celé scény (volba způsobu vykreslování, transformace) a toto nastavení zůstane zachováno do té doby, než ho explicitně změníme. Výhoda tohoto přístupu spočívá především v tom, že funkce pro vykreslování mají menší počet parametrů a že jedním příkazem lze globálně změnit způsob vykreslení celé scény, například volbu drátového zobrazení modelu (wireframe model) nebo zobrazení pomocí vyplněných polygonů (filled model). Vykreslování scény se provádí procedurálně – voláním funkcí OpenGL se vykreslí výsledný rastrový obrázek. Výsledkem volání těchto funkcí je rastrový obrázek uložený v tzv. framebufferu, kde je každému pixelu přiřazena barva, hloubka, alfa složka popř. i další atributy. Z framebufferu lze získat pouze barevnou informaci a tu je možné následně zobrazit na obrazovce – viz následující obrázek.

Jakým způsobem OpenGL vykresluje


OpenGL nezaručuje, že při spuštění identického programu používajícího knihovnu OpenGL na různých platformách nebo různých grafických akcelerátorech dostaneme vždy přesně stejný výsledek. Pokud bychom oba výsledné rastrové obrázky porovnali pixel po pixelu, mohli bychom zjistit mírné rozdíly v barvách. Může to být způsobeno například odlišnou přesností reprezentace čísel na grafické kartě, odlišnými algoritmy pro interpolaci barvy, normály a texturových souřadnic nebo jinou bitovou hloubkou Z-bufferu. Celkové geometrické a barevné podání scény by však mělo být zachováno.

Pomocí funkcí poskytovaných knihovnou OpenGL lze vykreslovat obrazce a tělesa složená ze základních geometrických prvků, které nazýváme grafická primitiva. Mezi tato primitiva patří bod, úsečka, trojúhelník, čtyřúhelník, plošný konvexní polygon, bitmapa (jednobarevný rastrový obraz) a pixmapa (barevný rastrový obraz). Existují i funkce, které podporují proudové vykreslování některých primitiv – lze například vykreslit polyčáru (line loop), pruh trojúhelníků (triangle strip), pruh čtyřúhelníků (quad strip) nebo trs trojúhelníků (triangle fan). Na vrcholy tvořící jednotlivá grafická primitiva lze aplikovat různé transformace (otočení, změna měřítka, posun, perspektivní projekce), pomocí kterých lze poměrně jednoduše vytvořit animace. Vykreslovaná primitiva mohou být osvětlena nebo pokryta texturou. Dále je možné celou vykreslovanou scénu „skrýt“ v mlze.

Z hlediska datové reprezentace vykreslované scény poskytují funkce OpenGL, podobně jako Direct 3D Immediate Mode, pouze základní rozhraní pro přístup ke grafickým akcelerátorům. Existují však rozšiřující knihovny, které funkcionalitu dále zvyšují. Jednou ze základních knihoven používaných společně s OpenGL je knihovna GLU (OpenGL Utilities), která umožňuje využívat tesselátory (rozložení nekonvexních polygonů na trojúhelníky),e­valuátory (výpočet souřadnic bodů ležících na parametrických plochách) a vykreslovat kvadriky (koule, válce, kužely a disky). Další nadstavbovou knihovnou je Open Inventor, pomocí kterého lze konstruovat celé scény složené z hierarchicky navázaných objektů. V porovnání s Direct 3D Retained Mode, kde se také pracuje s hierarchií scény, je však Open Inventor knihovna mnohem mocnější a přitom má poměrně jednoduché rozhraní.

V dalším dílu tohoto seriálu si popíšeme syntaxi funkcí deklarovaných v OpenGL a uvedeme si příklad na vykreslení jednoduchého obrazce.

Reference

[1] Silicon Graphics: "OpenGLTM Reference Manual ",
Silicon Graphics, Inc., 1994. 

[2] Segal M., Akeley K.: „The OpenGLTM Graphics System: A Specification (Version 1.2.1)“,
Silicon Graphics, Inc., 1999. 

[3] Wright R. S.: „OpenGL SuperBible “,
Waite Group Press, 1999.

[4] Kilgard, Mark J.: „The OpenGL Utility Toolkit (GLUT) Programming Interface, API Version 3“,
Silicon Graphics, Inc., November 13, 1996. 

[5] Kolektiv autorů: „GLUT Page
www.opengl.or­g/developers/do­cumentation/glut­.html

[6] Neider Jackie, Davis Tom, Woo Mason and Shreiner David: „Open GLTM Programming Guide: The official guide to learning OpenGL (Third Edition)“,
Addison-Wesley Publishing Company, Silicon Graphics, Inc., ISBN 0–201–60458–2, 1999. 

[7] Hill, F. S. jr.: „Computer Graphics using Open GL “,
Prentice Hall, 2001. 

[8] Kolektiv autorů: "Světový portál stránek o grafické knihovně OpenGLTM "
www.opengl.org

[9] Kolektiv autorů: "Český portál stránek o grafické knihovně OpenGLTM "
www.opengl.cz

Školení: Návrh a používání MySQL databáze

 

Naučte se používat jednu z nejrozšířenějších databází. Dozvíte se vše potřebné od návrhu až po samotné využití MySQL v projektech.

Školení pro všechny, kteří se chtějí naučit efektivně pracovat s MySQL nebo se v práci s touto databází zlepšit.

Přihláška a podrobné informace

Ohodnoťte jako ve škole:
Průměrná známka 2,73

Přehled názorů

Jen tak dal!
Pepik 1. 7. 2003 10:56
Nový
Pekny clanek
Karel 1. 7. 2003 13:54
Nový
Super, uz se tesim na pokracovani...
subrahmanyan 1. 7. 2003 18:36
Nový
skvely clanok
tibor 1. 7. 2003 22:10
Nový
└ 
Re: skvely clanok
Pavel Tisnovsky 2. 7. 2003 09:24
Nový
Dobre
Petr 2. 7. 2003 11:21
Nový
└ 
Re: Dobre
jake&the_madman 2. 7. 2003 20:58
Nový
Pavel Tisnovsky
Tomas Crhonek 2. 7. 2003 15:34
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem