lekcja2

Lemur zaprasza

Lekcja 2 - Rysowanie trojkatow i czworokatow



 



W pierwszym lekcji
dotyczacej OpenGL nauczylem cie jak sie tworzy miejsce pracy. W tym artykule
naucze cie jak sie tworzy trojkaty i czworokaty. Trojkaty bêdziemy tworzyli
urzywajac funkcji GL_TRIANGLES, natomiast czworokaty urzywajac funkcji
GL_QUADS.Bedziemy korzystac z kodu z pierwszej lekcji (to znaczy z szablonu :))
a nowe rzeczy bedziemy dodawac do procedury DrawGLScene(). Przepisze ja teraz
ponizej, mozesz zamienic procedure DrawGLScene() na ta ponizsza albo po prostu
dodac te linie kodu ktorych nie ma w szablonie.



 



 int DrawGLScene(GLvoid)



 {



 glClear(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT);



 glLoadIdentity();



 



Teraz trzeba sobie
powiedziec ze os X rusza sie w lewo i prawo, os Y w gore i w dol a os z w glab
i na zewnatrz ekranu.Centralnym punktem OpenGL jest punkt 0.0f osi X i Y. Punkt
po lewej stronie ekranu bedzie mial numer ujemny, a po prawej stronie bedzie to
liczba dodatnia. Ruszajac sie ku gorze bedzie to tez numer ujemny, ruszajac sie
w dol bedzie to numer ujemny. W glebi ekranu jest numer ujemny a poruszajac sie
do przodu ekranu pedzie to liczba dodatnia.Funkcja glTranslatef(x, y, z)
ustawia punkt centralny wzdloz osi x,y,z tak jak jest to podane. Ponizsza
linijka kodu przesowa w lewa strone os X o 1,5 jednostki, os Y nie przesowa
wcale a os Z porusza 6.0 jednostek wglab ekranu.



 



 glTranslatef(-1.5f,0.0f,-6.0f);  
// Przesowa w lewo o 1.5 jednostki i 6.0 jednostek w glab ekranu



 



Teraz kiedy przesunelismy
punkt centralny ekranu w lewa strone i kiedy jestesmy juz w glebi ekranu o 6.0
jednostek. Mozemy teraz rozpoczac tworzenie trojkata. Funkcja glBegin oznacza
ze chcemy zaczac tworzyc trojkat, natomiast funkcja glEnd() oznacza, ze juz
skaczylismy tworzyc ten trojkat. Jezeli chcesz stworzyc obiekt o 3 punktach to
uzyj funkcji GL_TRIANGLES, trojkaty tworza sie bardzo szybko, chociaz zalezy to
troche od twojej karty graficznej. Jak chcesz utworzyc obiekt skladajacy sie z
4 punktow to uzyj GL_QUADS, a jesli chcesz stworzyc obiekt skladajacy sie z
wiecej niz 4 punkty to uzyj gl_POLYGON. W naszym przykladowym programie
bedziemy tworzyli tylko jeden trojkat, ale jezeli chcemy stworzyc jeszcze jeden
to wystarczy dolaczyc trzy linijki kodu (dla 3 punktow) po trzech pierwszych.
Wsystkie te szesc linijek kodu musza znajdowac sie miedzy glBegin (GL_TRIANGLES)
a glEnd(). Pierwsza linia za gl_BEGIN stawia pierwszy punkt naszegj figury.
Pierwsza wartosc funkcji glVertex jest dla osi X, druga dla osi Y, a trzecia
dla osi Z. A wiec w pierwszej linijce ponizszego kodu nie poruszamy osia X ani
w lewo ani w prawo. Poruszamy za to jedna jednostke do gory i nie poruszamy osi
Z. To daje nam gorny wierzcholek naszego trojkata. Nastepna funkcja glVertex
przesowa o jedna jednostke os X i o jedna jednostke w dol w osi Y. To daje nam
dolny lewy punkt naszgo trojkata. Trzecia funkcja glVertex daje nam
przesuniecie w prawo o jedna jednostke i w dol o jedna jednostke. Co daje nam
dolny prawy rog naszeogo trojkata. Funkcja glEnd() mowi OpenGL, ze nie chcemy
juz stawiac wiecej punktow. Na dole przedstawiona jest funkcja o ktorej mowa
byla powyzej.



 



 glBegin(GL_TRIANGLES); // Poczatek tworzenia trojkata



   glVertex3f( 0.0f, 1.0f, 0.0f); // Gora



   glVertex3f(-1.0f,-1.0f, 0.0f);
// Lewy dol



   glVertex3f( 1.0f,-1.0f, 0.0f); // prawy dol



 glEnd(); // Koniec tworzenia trojkata



 



Ok teraz gdy juz mamy
trojkat na lewej stronie ekranyu zrobiony, musimy teraz przesunac sie na prawa
polowe ekranu by utworzyc tam kwadrat. Znowu do tego celu urzyjemy funkcji
glTranslate. Tym razem jednak musimy przesunac sie na prawa strone, wiec X musi
miec wartosc dodatnia. Poniewaz poprzednio przesunelismy sie w lewo o 1,5
jednostek, wiec teraz musimy sie przesunac o 1,5 jednostek w prawo. Musimy sie
jednak oczywiscie przesunac jeszcze o 1.5 jednostek, aby to jakos wszystko
wygladalo. Musimy sie w sumie przesunac o 3 jednostki w prawo.



 



 glTranslatef(3.0f,0.0f,0.0f);    
// Przesuwamy sie o 3 jednostki w prawo



 



Teraz stworzymy kwadrat, a
osiagniemy to urzywajac funkcji gl_QUADS. Kwadrat jest oczywiscie czteroboczny,
wiec ta funkcja nadaje sie do tego perfekcyjnie. Kod tworzenia kwadratu jest
bardzo podobny do tego, ktorego urzywalismy do tworzenia trojkata. Jedyna
roznica pomiedzy gl_QUADS a GL_TRIANGLES jest jeden dodatkowy glVertex3f.
Bedziemy rysowac nasz kwadrat zaczynajac od gornej lewej strony potem gorna
prawa, dolna prawa, dolna lewa (zgodnie ze wskazowkami zegara). Aby bylo to
zgodne z ruchem wskazowek zegara kwadrat bedzie pokanywany od tylnej strony.
Znaczy to, ze strona, ktora bedziemy ogladali bedzie strona tylnia. To, ze
bedziemy rysowac kwadrat od tylu znacznie ulatwi nam pewne rzeczy. Moze narazie
nie jest to jakas bardzo wazna sprawa bez, ktorej nie dalo by sie obejsc, ale
pozniej zobaczysz, ze ta wiedza bardzo ci sie przyda. Mozesz tez rysowac
czworokaty normalnie, a to uznaj tylko jak ciekawoske - sam wybierz.



 



 glBegin(GL_QUADS); // poczatek



 glVertex3f(-1.0f, 1.0f, 0.0f); // gora lewo



 glVertex3f( 1.0f, 1.0f, 0.0f); // gora prawo



 glVertex3f( 1.0f,-1.0f, 0.0f); // dol prawo



 glVertex3f(-1.0f,-1.0f, 0.0f);
// dol lewo



  glEnd(); // koniec



  return TRUE;



 



Na koniec zmienimy napis
znajdujacy sie na samej goze okna jak nie jest ono otworzone na pelnym ekranie.



 



 if (keys[VK_F1]) // Czy klawisz F1 zostal nacisniety?



 {



 keys[VK_F1]=FALSE; // Jezeli tak ustaw wartosc na false



 KillGLWindow(); // Zamknij nasze okno



 fullscreen=!fullscreen; // pelny ekran / tryb
okienkowy



  // Przerabiamy nasze okno OpenGL



 if (!CreateGLWindow("Lekcja pierwsza - trojkaty i
czworokaty",640,480,16,fullscreen))



 {



 return 0; // Wyjdz jezeli okno nie zostalo otworzone



 }



 }



 



W tej lekcji staralem sie
wyjasniac jak najwiecej szczegolow w sposobie tworzenia trojkatow i czworokatow
na ekranie urzywajac OpenGL. Jezeli masz jakies pytania to prosze napisz do
mnie. Jezeli czujesz, ze wytlumaczylem cos zle, albo kod jest zle napisany,
albo czujesz, ze zrobil bys to lepiej tez daj mi znac.



 



 

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • teen-mushing.xlx.pl
  • WÄ…tki
    Powered by wordpress | Theme: simpletex | © Lemur zaprasza