Darmowa prenumerata - tu i teraz!
BezImienny - wersja online!
Serwis internetowy netmax.pl
Poprzedni artykułNastępny artykuł Komputery   

OpenGL - Lekcja 1

Piotr Smirnow

Wszystkie obiekty trójwymiarowe w grach czy programach do tworzenia grafiki 3D zbudowane są z prymitywów (prostych obiektów). Tymi prymitywami są trójkąty i czworokąty. Większość programów korzysta z trójkątów, ponieważ algorytm rysowania trójkąta jest prostszy niż rysowania czworokąta a co za tym idzie jest szybszy! Co więcej wszystkie karty 3D wspomagają rysowanie trójkątów.

W OpenGL mamy możliwość narysowania punktów, linii, trójkątów, czworokątów, innych prymitywów. My zajmiemy się trójkątami i czworokątami.
Aby narysować jakikolwiek prymityw należy skorzystać z funkcji glBegin(GL_NAZWAPRYMITYWU). Nazwą prymitywu może być GL_TRIANGLES - trójkąt, GL_QUADS - czworokąt. glBegin(GL_TRIANGLES) rozpocznie rysowanie trójkąta.

int DrawGLScene(GLvoid) // Tu rysujemy wszystko

{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//Wyczyść ekran i bufor głębokości

glLoadIdentity(); // Powróć do początku układu współżednych

glBegin(GL_TRIANGLES); // Powiadom OpenGL, że rysujemy trójkąt


Jak wiemy trójkąt składa się z 3 wierzchołków. W OpenGL wierzchołek nazywa się vertex. Kiedy napiszemy glBegin(GL_TRIANGLES) musimy podać wierzchołki. Służy do tego funkcja glVertex3f(X, Y, Z), gdzie X, Y, Z to współrzędne naszego wierzchołka. Współrzędne podajemy w liczbach typu float.
glVertex3f(1.0f, 1.0f, -4.0f); // wierzcołek (vertex) 1
glVertex3f(0.0f, 0.0f, -4.0f); // wierzcołek (vertex) 2
glVertex3f(-1.0f, 0.0f, -4.0f); // wierzcołek (vertex) 3


Po zakończeniu podawania wierzchołków / vertexów musimy powiadomić OpenGL, że kończymy rysowanie trójkąta. Służy do tego polecenie glEnd().
glEnd(); // Powiadom OpenGl,
// że kończymy rysowanie trójkąta.
return TRUE;
}


UWAGA !! Każdy trójkąt ma dwie strony Przednią i Tylną.
Rysując trójkąt musimy pamiętać o kolejności podawania vertexów. OpenGL domyślnie przyjmuje, że wielokąty o kierunku przeciwnym do kierunku wskazówek zegara są ustawione przodem do patrzącego.

Aby zmienić domyślne działanie OpenGL, możesz wywołać funkcje glFrontFace(GL_CW). Parametr GL_CW mówi OpenGl, żeby za odwrócone przodem były uważane trójkąty o kierunku zgodnym z ruchem wskazówek zegara. Powrót do kierunku przeciwnego jest uzyskiwany przez podanie parametru GL_CCW funkcji glFrontFace(). glFrontFace(GL_CCW) - Mówi OpenGL, że odwrócone przodem są trójkąty o kierunku przeciwnym do wskazówek zegara. Na razie te ustawienia nas nie interesują, ale np. przy włączeniu usuwania niewidocznych / tylnich powierzchni trójkąty zwrócone tyłem są nie rysowane !!.
Rysowanie czworokąta jest podobne do rysowania trójkąta. Piszemy glBegin(GL_QUADS) i podajemy współrzędne 4 wierzchołków czworokąta. Kończymy pisząc glEnd().

Tryby Wielokątów

Standardowo w OpenGL wielokąty rysowane są wypełnione domyślnym kolorem. Jak wiecie każdy wielokąt może być także oteksturowany (opisze Teksturowanie w następnych Lekcjach), mogą być rysowane tylko linie tworzące wielokąt, bądź same punkty (są wtedy rysowane tylko wierzchołki / vertexy).
Jeżeli chcemy zmienić tryb rysowania wielokąta musimy wywołać funkcje glPolygonMode(GL_PARAM1, GL_PARAM2). Pierwszy parametr określa dla której strony ustawiamy tryb rysowania. GL_FRONT - przednia strona, GL_BACK - tylna, GL_FRONT_AND_BACK - tylna i przednia jednocześnie. Drugim parametrem jest tryb rysowania GL_LINE - rysuje tylko linie zewnętrzne, GL_FILL - rysuje wypełniony wielokąt (musi być włączone, jeżeli chcemy używać teksturowania, OpenGL ustawia to domyślnie), GL_POINT - rysuje punkty (wierzchołki / vertexy).
glPolygonMode(GL_FRONT, GL_LINE) - rysuje przody wielokątów jako zewnętrzne linie .

Ten program jak i kody źródłowe do lekcji znajdziesz na http://opengl.si.pl

Piotr Smirnow
Tekst pochodzi ze strony http://opengl.si.pl - Portal Technologi OpenGL