CZ NeHe OpenGL
Lekce 2

Lekce 2 - Vytváření trojúhelníků a čtyřúhelníků

Zdrojový kód z první lekce trochu upravíme, aby program vykreslil trojúhelník a čtverec. Vím, že si asi myslíte, že takovéto vykreslování je banalita, ale až začnete programovat pochopíte, že orientovat se ve 3D prostoru není na představivost až tak jednoduché. Jakékoli vytváření objektů v OpenGL závisí na trojúhelnících a čtvercích. Pokud pochopíte tuto lekci máte napůl vyhráno.

Chcete-li použít kód z první lekce, tak přepište funkci DrawGLScene(), vše ostatní zůstává nezměněno.

int DrawGLScene(GLvoid)// Vykreslování

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// Vymaže obrazovku a hloubkový buffer

glLoadIdentity();// Reset matice

Použitím glLoadIdentity() se přesunete doprostřed obrazovky. Osa x prochází zleva doprava, osa y zespodu nahoru a osa z od monitoru směrem k vám. Střed OpenGL scény je na souřadnicích, kde se x, y i z rovná nule. Funkce glTranslatef(x, y, z) pohybuje počátkem souřadnicových os. Následující řádek ho posune doleva o 1.5 jednotky. Nepřesouváme se na ose y (0.0f) a posune se směrem dovnitř obrazovky o 6.0 jednotek. Při použití glTranslatef(x, z, z), se nepohybujeme vždy z centra obrazovky, ale z místa, kde jsme se s pomocí této funkce dostali. Zadáváme tedy pouze offset pohybu.

glTranslatef(-1.5f,0.0f,-6.0f);// Posun doleva a do hloubky

Nyní jsme se posunuli do levé poloviny obrazovky a nastavili jsme místo pohledu dostatečně hluboko, takže můžeme vidět celou scénu. Vykreslíme trojúhelník. Posun po ose z určuje jak velké budou vykreslované objekty (perspektiva). GlBegin(GL_TRIANGLES) OpenGL říká, že chceme začít kreslit trojúhelníky a glEnd() oznamuje ukončení kreslení trojúhelníků. Kreslení trojúhelníků je na většině grafických karet o hodně rychlejší než kreslení čtverců. Pokud chcete spojovat čtyři body použijete GL_QUADS. Mnohoúhelníky se vytvářejí pomocí GL_POLYGON. Většina karet je ale stejně konvertuje na trojúhelníky. V našem jednoduchém programu nakreslíme pouze jeden trojúhelník. Pokud bychom chtěli nakreslit druhý trojúhelník, stačí přidat další tři body hned za první tři. Všech šest řádků by bylo mezi glBegin(GL_TRIANGLES) a glEnd() a každá skupina po třech tvoří jeden trojúhelník. Tohle platí stejně i pro čtyřúhelníky, kde jsou skupiny brány po čtyřech. Kreslení mnohoúhelníku je ale už o něčem jiném, protože může být vytvořen z libovolného počtu bodů. Všechny body by byly přiřazeny k jedinému mnohoúhelníku. První řádek po glBegin() definuje první bod trojúhelníku. První parametr ve funkci glVertex3f() určuje souřadnici na ose x, druhý parametr osu y a třetí parametr osu z. V prvním řádku se tedy nepohybujeme po ose x. Bod umístíme pouze o jednu jednotku nahoru na ose y a na ose z necháme opět nulu. Tím nastavíme horní bod. Druhá volání glVertex3f() umisťuje bod posunutý o jednotku vlevo a dolů. Tím vytvoříme druhý vrchol. Třetí funkce umisťuje bod vpravo na x a dolů na y. Máme vytvořený třetí vrchol. Funkcí glEnd() řekneme OpenGL, že už nebudeme umísťovat další body. Zobrazí se vyplněný trojúhelník.

glBegin(GL_TRIANGLES);// Začátek kreslení trojúhelníků

glVertex3f( 0.0f, 1.0f, 0.0f);// Horní bod

glVertex3f(-1.0f,-1.0f, 0.0f);// Levý dolní bod

glVertex3f( 1.0f,-1.0f, 0.0f);// Pravý dolní bod

glEnd();// Ukončení kreslení trojúhelníků

Na levé straně obrazovky jsem vykreslili trojúhelník. Provedeme translaci doprava a umístíme čtverec. Na ose x se posunujeme o 1.5, abychom dosáhli zpět středu a k tomu přičteme dalších 1.5 a budeme vpravo. Na osách y a z se nepřesunujeme.

glTranslatef(3.0f,0.0f,0.0f);// Posun o 3 jednotky doprava

Kód pro nakreslení čtverce je velice podobný tomu, který jsme použili pro trojúhelník. Jediný rozdíl v použití GL_QUADS místo GL_TRIANGLES je přidání dalšího vertexu pro čtvrtý bod. Nakreslíme postupně levý horní, pravý horní, pravý dolní a levý dolní vrchol.

glBegin(GL_QUADS);// Začátek kreslení obdélníků

glVertex3f(-1.0f, 1.0f, 0.0f);// Levý horní bod

glVertex3f( 1.0f, 1.0f, 0.0f);// Pravý horní bod

glVertex3f( 1.0f,-1.0f, 0.0f);// Pravý dolní bod

glVertex3f(-1.0f,-1.0f, 0.0f);// Levý dolní bod

glEnd();// Konec kreslení obdélníků

return TRUE;// Ukončení funkce

}

To je pro tuto lekci vše. Probrali jsme nejjednodušší kreslení. Doufám, že vás moc neodradilo - to teprve přijde :-]

napsal: Jeff Molofee - NeHe <nehe (zavináč) connect.ab.ca>
přeložil: Václav Slováček - Wessan <horizont (zavináč) host.sk>

Zdrojové kódy

Lekce 2

<<< Lekce 1 | Lekce 3 >>>


Tento offline překladů NeHe OpenGL Tutoriálů lze volně šířit podle Obecné veřejné licence GNU Nové okno, jeho nejnovější verze je dostupná na domovském webu projektu CZ NeHe OpenGL Nové okno.

Michal Turek - Woq <WOQ (zavináč) email.cz> (24.02.2004).