OpenGL - "Jeden způsob nestačí" - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



C/C++

OpenGL - "Jeden způsob nestačí"

9. května 2001, 00.00 | První seznámení s OpenGL a knihovnou Auxiliary Libary. Navrhneme si jednoduchý prográmek pro zobrazení barevné škály a povíme si něco blíže k programování s touto knihovnou.

OpenGL Auxiliary Libary (console app)

Asi před týdnem jsem začal koketovat s myšlenkou začít psát na těchto stránkách miniseriál o OpenGL, který by srozumitelně vysvětloval , jak se programuje s touto knihovnou. Ale ještě než jsem se pustil do tak nelehkého úkolu, vzpomněl jsem si na své začátky, když jsem dělal konzolové aplikace s OpenGL Auxiliary Libary

Podívejme se na OpenGL program přes konzolovou aplikaci . Je vhodný zvláště pro ortodoxní céčkaře, kteří akceptují pouze a jenom funkci main. Nevýhodou takovýchto programů je, že se zobrazují pouze v oknech s titulkovým pruhem a ne přes celou obrazovku.

Velkou výhodou je, že lze používat čistý jazyk c.

Co k tomu budeme potřebovat?

Především potřebujeme hlavičkové soubory OpenGL, jeden z nich je určen pro auxiliary libary - glaux.h. Potom musíme mít samotnou knihovnu auxiliary libary - glaux.lib, ten najdete u přiloženého příkladu.

Ještě než se podíváme na jednoduchý příklad, bych vás chtěl upozornit na help k OpenGL. Najdete ho v adresáři s helpy (v BCB4 mezi MS SDK Help Files v adresáři Borland Shared/MSHelp) a jmenuje se opengl.hlp. Nepovažuji jej za příliš zdařilý, ale obsahuje spoustu příkladů právě pro auxiliary libary. Help je dobrý, když zapomenete některé funkce, parametry atd. Pro začátečníka je to podle mého názoru hotový "guláš".

Zkusme si naprogramovat nejjednodušší program, který jde v OpenGL stvořit. Uděláme trojúhelník s prolínajícími barvami (RGB trojúhelník). Výsledek si můžete prohlédnout na obrázku a zdroják stáhněte zde (BCB4).

Aby se program dal přeložit je potřeba do projektu přidat k překladu knihovnu glaux.lib, kterou máte u výše zmíněného programu. Jenomže v tomhle je C++ Builder hodně nespolehlivý (má hodně chyb :)). Přidáním souboru do projektu nic nevyřešíte. Překladač ohlásí chybu "expected". Nejspolehlivější je editovat Makefile (Projekt/View Makefile). Změňte následující řádek:


ALLLIB = $(LIBFILES) import32.lib cw32mt.lib glaux.lib

Tedˇuž je vše v pořádku.

Hlavní funkcí v našem programu je funkce main. Ve funkci main definujeme, jaký druh (mód) okna budeme chtít použít. V našem případě je nejvhodnější RGB okno:

auxInitDisplayMode (AUX_RGB);

Dále musíme někam okno umístit na obrazovku. My ho umístíme do levého horního rohu a bude 500 pixelů široké a 450 pixelů dlouhé.

auxInitPosition (0, 0, 500, 450);

jako seriózní programátoři si okno pojmenujeme např. "Trojúhelník":

auxInitWindow ("Trojúhelník");

Potom okno inicializujeme pro vlastní potřeby (stínování atd.)

myinit ();

A poslední důležitá věc, vše poslat na obrazovku.

auxMainLoop(display);

Této funkci řekneme, že budeme vykreslovat pomocí funkce display.

 

Funkce myinit slouží pro vlastní inicializace. Zde se nastaví např. podkladová barva nebo použité stínování.

glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_FLAT);

glClearColor nastaví podkladovou barvu na černou a glShadeModel naopak označuje typ stínování.

Zkuste si tyto hodnoty změnit např.:

glClearColor (0.0, 0.0, 1.0, 0.0); - namísto černého podkladu budete mít modrý. První tři parametry jsou hodnoty R,G,B.

U glShadeModel máte na výběr pouze dvě možnosti: GL_FLAT, GL_SMOOTH.

Pěknější je GL_SMOOTH (Gouradovo stínování), bude nám krásně prolínat barvy.

Funkce display je zobrazovací, dalo by se říci - rýsovací. Protože je náš program hodně jednoduchý, narýsujeme si pouze trojúhelníček.

Konstrukce je následující:

glBegin (GL_TRIANGLES);
glColor3f(0.0, 0.0, 1);
glVertex2f (100.0 , 50.0);
glColor3f(0.0, 1.0, 0);
glVertex2f (400.0 , 50.0);
glColor3f(1.0, 0.0, 0);
glVertex2f (250.0 , 350.0);
glVertex2f (100.0 , 50.0);
glEnd ();

 

Ani to nebolelo. Jestli se vám tento příklad zdál opravdu jednoduchý, podívejte se do Helpu k OpenGL, najdete zde opravdu zajímavé příklady s OpenGL auxiliary libary.

Tématické zařazení:

 » Rubriky  » C/C++  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: