V prvej časti sme si ukázali ako vytvoriť jednoduché OpenGL okno. V tejto časti si už ukážeme, ako vytvoriť základné typy pre kreslenie a to sú trojuholníky a štvorce. Po anglicky GL_TRIANGLES a GL_QUADS. Ako ste si všimli je pred tým GL_. To znamená, že ide o nejakú konštantu z knižnice OpenGL.
Použijeme celý program uvedený v časti 1. Jediná odlišnosť, ktorú spravíme bude vo funkcii DrawGLScene, kde pridáme kúsok kódu, ktorý nám nakreslí 1 trojuholník a 1 štvorec.
Tu už prichádza samotná funkcia DrawGLScene.
int DrawGLScene(GLvoid) // táto funkcia kreslí
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// vyčistíme obrazovku a Depth Buffer
glLoadIdentity();
Volaním funkcie glLoadIdentity() sa opäť nastavíte do centra obrazovky, teda na 0,0,0. Os X je vodorovná, os Y zvislá a os Z vedie kolmo na plochu monitora. Takto sa to dá ľahko predstaviť. Napravo sú kladné čísla, naľavo záporné. Podobne je to aj pri Y a Z. Hore je kladná časť, dole záporná. A keď pôjdeme hlbšie po Z, tak to bude záporné a naopak kladné.
glTranslatef(x, y, z) nás posunie v 3D priestore, podľa parametrov, ktoré sme zadali, a to v poradí X, Y a Z.
Riadok nižšie nás posunie po X-ovej osi o 1.5. Po osi Y sa neposunieme a po Z sa posunieme o 6.0 jednotiek. Vždy majte na pamäti, že sa nehýbete na pozíciu akú zadáte, ale meníte sa vždy „o“ pozíciu, ktorú zadáte. Teda vždy majte na pamäti, kde sa nachádzate a koľko sa chcete z tejto pozície posunúť a ktorým smerom.
glTranslatef(-1.5f,0.0f,-6.0f); // doľava 1.5, dozadu 6.0
Tak a teraz sme sa pohli doľava a dozadu, takže máme dobrý pohľad na našu scénu. A môžeme začať kresliť trojuholník. Kameru si predstavte, ako stabilnú, teda je stále na 0,0,0 pozícii a mení sa len všetko okolo. Kamera stojí a svet okolo sa hýbe. Vhodnými rotáciami a posunmi sa dá spraviť presne to isté ako keby sa hýbala kamera. Ale neskôr si ukážeme aj menšiu pomôcku, ktorá nám uľahčí pohyb kamery v priestore.
A teraz ten trojuholník.
glBegin(GL_TRIANGLES) znamená, že ideme začať kresliť trojuholníky a glEnd() povie OpenGL, že už sme skončili kreslenie trojuholníkov. Zvyčajne, keď chcete nakresliť 3 body, tak použijete GL_TRIANGLES. Kreslenie trojuholníkov je o kúsok rýchlejšie na väčšine kariet. Ak chcete nakresliť 4 body a nechce sa Vám to kresliť ako 2 trojuholníky, a jednoducho si chcete uľahčiť živote, tak použijeme GL_QUADS. Niektoré karty aj tak renderujú štvorec ako 2 trojuholníky, takže to bude to isté. Ak chcete viac bodov ako sú 4 použite GL_POLYGON.
V našom jednoduchom programe nakreslíme 1 trojuholník. Ak by sme chceli aj druhý, mali by sme pridať ešte ďalšie 3 riadky (3body). A všetky riadky by boli medzi glBegin(GL_TRIANGLES) a glEnd(). Nie je dôvod dávať stále glBegin(GL_TRIANGLES) a glEnd() dookola pre každé 3 body. (GL_POLYGON) môže pozostávať z viacerých bodov a nezáleží na tom koľko ich bude. Začneme glBegin(GL_POLYGON) a skončíme glEnd().
Prvý riadok za glBegin nám určuje prvý bod nášho trojuholníka. Prvý riadok glVertex je pre os X, druhý Y, tretí Z. Teda od aktuálnej pozície určíme o koľko jednotiek na X,Y,Z je umiestnený bod. Takže na prvom riadku sa na osi X nehýbeme, ideme len hore. V druhom sa pohneme doľava dole a v treťom doprava dole. Po osi Z sa nehýbeme, náš trojuholník vďaka tomu vyzerá nakreslený ako na ploche. Keby sme sa pohli aj po osi Z v nejakom bode, tak by náš trojuholník vyzeral inak. Jeden jeho vrchol by už totiž bol v priestore. glEnd() povie OpenGL, že viacej bodov už do trojuholníkov nepoužijeme. Ako výsledok uvidíme, jeden vyplnený trojuholník.
glBegin(GL_TRIANGLES); // kreslíme trojuholníky
glVertex3f( 0.0f, 1.0f, 0.0f); // vrch
glVertex3f(-1.0f,-1.0f, 0.0f); // vľavo dole
glVertex3f( 1.0f,-1.0f, 0.0f); // vpravo dole
glEnd(); // koniec trojuholníkov
Náš trojuholník je už nakreslený a teraz sa posunieme kúsok doprava a začneme kresliť štvorec. Keďže teraz sme o 1.5 vľavo. Tak ak sa pohneme o 1.5 doprava tak prídeme do centra 0,0,0 a keď sa pohneme o 3.0 doprava, tak sa dostaneme do pravej polky obrazovky.
glTranslatef(3.0f,0.0f,0.0f); // doprava o 3
A teraz nakreslíme štvorec. Začneme použitím GL_QUADS. Štvorec je zvyčajne 4 stranný polygón. Kód pre vytvorenie štvorca je veľmi podobný, ako pri tvorení trojuholníka. Jediný rozdiel je pri tom, že to robíme použitím GL_QUADS a je tam o jeden bod viacej. Kreslíme ľavý horný, pravý horný, pravý dolný a ľavý dolný vrchol. Nakreslením štvorca v poradí v smere hodinových ručičiek bude štvorec nakreslený ako zadná plocha (back face). Keby sme nakreslili objekt opačne, v proti smere hodinových ručičiek, by sme objekt nakreslili tak, že by bol „tvárou“ ku nám. Zatiaľ to nie je dôležité, ale neskôr bude a je potrebné vedieť o tom.
glBegin(GL_QUADS); // kreslíme štvorec
glVertex3f(-1.0f, 1.0f, 0.0f); // vľavo hore
glVertex3f( 1.0f, 1.0f, 0.0f); // vpravo hore
glVertex3f( 1.0f,-1.0f, 0.0f); // vpravo dole
glVertex3f(-1.0f,-1.0f, 0.0f); // vľavo dole
glEnd(); // koniec štvorcov
return TRUE;
}
Nakoniec ešte zmeníme ešte kód, ktorý prepína okno z window na fullscreen.
if (keys[VK_F1]) // F1 stlačené?
{
keys[VK_F1]=FALSE;
KillGLWindow(); fullscreen=!fullscreen;
if (!CreateGLWindow("First Polygon Tutorial",640,480,16,fullscreen))
{
return 0;
}
}
Tak a teraz už viete nakresliť základný typ objektov a to sú trojuholníky a štvorce. Zdrojový súbor si samozrejme môžete stiahnuť a vyskúšať si zaexperimentovať s rôznymi hodnotami. Pre tých, ktorým to zvládnu, môžu skúsiť urobiť nejakú obmenu, ktorá by napríklad posúvala nejaký trojuholník po kružnici alebo sa približoval a vzďaľoval.
MSVC++ http://www.softsklad.host.sk/opengl/lesson02.zip