GLUT (1)

29. 4. 2003
Doba čtení: 5 minut

Sdílet

Dnešním dnem zahajujeme nový seriál, který se bude věnovat programování počítačové grafiky a tvorbě přenositelných grafických aplikací s pomocí knihovny GLUT.

Úvodník

V této sérii článků bude popsána programová knihovna GLUT (OpenGL Utility Toolkit), která slouží k výuce programování počítačové grafiky a k vytváření přenositelných grafických aplikací používajících pro vykreslování grafickou knihovnu OpenGL. Dále budou na několika příkladech předvedeny způsoby užití této knihovny při práci s běžně používanými překladači jazyka C a C++ pod různými operačními systémy. Článek je zaměřen především na vývojáře používající jazyk C nebo C++ a operační systémy Linux, Windows nebo IRIX, kde byly ukázkové programy odzkoušeny. Popsané funkce knihovny GLUT však lze použít i v dalších programovacích jazycích, například ve Fortranu nebo Pascalu.

Základy práce s knihovnou GLUT

Vznik a hlavní funkce knihovny GLUT

Knihovna OpenGL Utility Toolkit (v dalším textu budeme tento název nahrazovat všeobecně používanou zkratkou GLUT) byla vytvořena jako doplněk ke grafické knihovně OpenGL. Knihovna OpenGL je určena především k zobrazování dvourozměrných a trojrozměrných modelů těles i celých scén. Podrobná dokumentace k této knihovně je popsána například v [1] [2] [3] [4] [5].

Knihovna OpenGL byla vytvořena tak, aby byla nezávislá na operačním systému, grafických ovladačích a správci oken (Window Manageru). Proto v ní také nejsou obsaženy žádné funkce pro práci s okny (otevírání, rušení, změna velikosti), pro vytváření grafického uživatelského rozhraní (GUI) nebo pro zpracování událostí. Tyto funkce, které jsou systémově závislé, se dříve musely naprogramovat pro každý operační systém (resp. jeho grafickou nadstavbu) zvlášť, což od vývojáře aplikace vyžadovalo podrobnou znalost funkcí daného operačního systému, grafické nadstavby a správce oken.

Pomocí knihovny OpenGL lze vykreslovat pouze tělesa složená ze základních geometrických prvků [1], jako jsou například bod, úsečka, trojúhelník, plošný polygon apod. Knihovna OpenGL tedy neřeší například vykreslování znaků (písma, fontů), protože se jedná o funkci částečně závislou na operačním systému a jeho grafické nadstavbě.

Knihovna OpenGL je dnes používána v mnoha oblastech počítačové grafiky [6], mimo jiné i pro výuku programování počítačové grafiky (pro výuku doporučuji zejména výtečnou knihu [5], kde jsou algoritmy počítačové grafiky demonstrovány na programech používajících pro grafický výstup OpenGL nebo pro dvourozměrné příklady PostScript!). Pro výuku programování počítačové grafiky je samozřejmě vhodné zvolit co nejjednodušší programátorské rozhraní, aby se v počátečních fázích výuky bylo možné soustředit především na podstatné věci.

Postupem času také došlo ke značnému rozšíření knihovny OpenGL, která se kromě UNIXových grafických stanic začala používat i na počítačích řady PC s operačními systémemy Windows NT a posléze i Windows 95, Windows 98 a dále s celou řadou operačních systémů založených na novém jádře NT verze 5.0. Vznikala tak potřeba přenosu stávajících aplikací a tvorby nových aplikací pro diametrálně odlišné systémy (srovnej například diametrální rozdíl při tvorbě aplikace s Xlib a WinAPI).

Knihovna GLUT [7][11][12][1­3] částečně řeší problémy naznačené v předchozích odstavcích. Definuje a implementuje aplikační rozhraní pro tvorbu oken a jednoduchého grafického uživatelského rozhraní, přičemž je systémově nezávislá, tj. pro práci s okny se na všech systémech používají vždy stejné funkce, které mají stejné parametry. Do knihovny jsou také přidány funkce pro vykreslování bitmapového a vektorového písma v několika základních řezech.

Nezávislost na operačním systému i platformě jde dokonce tak daleko, že se ve všech funkcích knihovny GLUT používají pouze základní datové typy jazyka C. Například při vytvoření okna je vrácen identifikátor okna jako kladné číslo typu int a ne HWND či ukazatel, jak je tomu u systémových funkcí Xlib nebo WinAPI.

V současné době je knihovna GLUT používána především na Linuxu, BSD Unixech, IRIXu, OS/2 a na platformách Microsoft Windows. Vzhledem k dostupnosti zdrojových kódů je možné provést překlad na většině systémů typu Unix, kde jsou k dispozici knihovny X Window a OpenGL. Kromě jazyka C/C++ existuje i rozhraní pro použití ve Fortranu a Object Pascalu (což je programovací jazyk, který tvoří základ RAD prostředí Delphi a Kylix). Vzhledem k tomu, že celé programové rozhraní knihovny GLUT sestává z volání funkcí vracejících pouze základní (primitivní) datové typy, je možné poměrně jednoduše vytvořit napojení pro další programovací jazyky, které mají možnost pracovat s dynamickými knihovnami.

Začlenění knihovny GLUT do aplikací

Knihovna GLUT definuje novou funkční vrstvu mezi knihovny operačního systému a vlastní aplikaci. Z aplikace lze volat funkce knihovny GLUT, knihovny OpenGL i operačního systému. K zajištění systémové nezávislosti aplikace na úrovni zdrojových textů je nevhodné používat přímo volání systémových funkcí. Na obrázku 1.1 se nakresleno schéma začlenění knihovny GLUT do grafických aplikací.

Schéma začlenění knihovny GLUT do aplikací

Samozřejmě je stále možné používat klasických knihoven jazyka C, jako jsou například knihovny stdlib, stdio, string, time nebo math. Funkce implementované v těchto knihovnách jsou dnes podporovány na většině platforem a jsou také popsány v normě jazyka C (C99, ANSI C nebo ISO C). Většina systémů (resp. jejich knihoven) také podporuje funkce definované v normě POSIX.

V příštím dílu budou popsány hlavní výhody a nevýhody použití knihovny GLUT při psaní aplikací.

Reference

[1] 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.



[2] Silicon Graphics: ''OpenGLTM Reference Manual '',

Silicon Graphics, Inc., 1994.

[3] Segal M., Akeley K.: ''The OpenGLTM Graphics System: A Specification (Version 1.2.1)'',

Silicon Graphics, Inc., 1999.

 

[4] Wright R. S.: <i>OpenGL SuperBible </i>,

Waite Group Press, 1999.

[5] Hill, F. S. jr.: <i>Computer Graphics using Open GL </i>,

Prentice Hall, 2001.

[6] Galagher, S. Richard (editor): ''Computer Visualization (Graphics Techniques for Scientific and Engineering Analysis'',

A Solomon Press Book, CRC Press, ISBN 0–8493–9050–8, 1995.

[7] Kilgard, Mark J.: ''The OpenGL Utility Toolkit (GLUT) Programming Interface, API Version 3'',

Silicon Graphics, Inc., November 13, 1996.

[8] Kolektiv autorů: ''Světový portál stránek o grafické knihovně OpenGLTM ''

http://www.open­gl.org

[9] Kolektiv autorů: ''Český portál stránek o grafické knihovně OpenGLTM ''

http://www.open­gl.cz

[10] Kolektiv autorů: <i>GLUT Page</i>

http://www.open­gl.org/develo­pers/documenta­tion/glut.html

[11] Kilgard, Mark, J.: <i>GLUT Specification</i>

bitcoin_skoleni

http://www.open­gl.org/develo­pers/documenta­tion/glut/spec­3/spec3.html

[12] Kolektiv autorů: <i>Frequently Asked GLUT Questions</i>

http://www.open­gl.org/develo­pers/documenta­tion/glut/glut­_faq.html

[13] Nate R.: <i>GLUT for Windows 32</i>

http://www.xmis­sion.com/~nate/glut­.html

[14] Stetten George and Crawford Korin: <i>GlutMaster version 0.3</i>

http://www.stet­ten.com/george/glut­master/glutmas­ter.html 

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.