W pierwszej lekcji nauczyłeś się tworzyć okno OpenGL. W tej nauczysz się tworzyć trójkąty i kwadraty. Stworzymy trójkąt używając GL_TRIANGLES i kwadrat używając GL_QUADS.
Używając kodu z poprzedniej lekcji, dodamy trochę nowości do funkcji DrawGLSCene(). Napiszemy ją tu na nowo aby były widoczne zmiany.
Przy wywołaniu glLoadIdentity() przmieszczasz się na środek ekranu. Oś X biegnie z lewej do prawej, Y z góry na dół, a Z do ciebie.
Środek ekranu to punkt 0.0 na osi X i Y. Poruszanie w lewo zmniejszy wartość X. W Prawo ją zwiekszy. W Górę zwiększy się wartość Y, a w dół zmniejszy. W Tył Zwiększy się wartość Z, a w przód Zmniejszy.
glTranslatef(x, y, z) przemieszcza obiekt po 3 osiach. Ta linia kodu porusza na osi X o 1.5 jednostki. Nie porusza na Y, ale porusza na Z w głąb ekranu 6.0 jednostek. glTranslatef() porusza współrzędne od punktu w którym ty się znajdujesz.
Teraz, kiedy przmieściliśmy się w 3/4 ekranu na lewo, i trochę na przód (-6.0), będziemy mogli zobaczyć utworzony trójkąt. glBegin(GL_TRIANGLES) oznacza, że rozpoczynamy rysowanie trójkątów. glEnd() oznacza koniec rysowania objektu. Jeśli chcesz narysować trzy punkty, użyj GL_TRIANGLES. Rysowanie trójkątów jest najszybszym rozwiązaniem na wielu kartach graficznych. Jeśli masz 4 punkty, użyj GL_QUADS aby było ci łatwiej. Jeśli masz więcej niż 4 punkty użyj GL_POLYGON.
W naszym przykładowym programie, narysujemy tylko jeden trójkąt. Jeśli chcielibyśmy jeszcze jeden, musielibyśmy dodać kolejne 3 linie kodu (3 wierzchołki trójkąta) po pierwszych trzech. Wszystkie 6 lini powinno być między glBegin(GL_TRANGLES) a glEnd(). Nie ma sensu pisać osobnego glBegin() i glEnd() dla każdego trójkąta. Z kwadratami jest podobnie, tylko należy podać nie 3, ale 4 wierzchołki.
Pierwsza linia po glBegin() wstawia pierwszy punkt trójkąta. Pierwszym numerem w glVertex jest pozycja na osi X, drugim na osi Y, a trzecim na Z. Pierwszy wierzchołek na środku osi X (0), jedną jednostkę w górę (1.0f) i 0.0 na osi Z. Jest to górny wierzchołek naszego trójkąta. Drugi glVertex leży jedną jednostkę w lewo, jedną w dół i Z bez zmian. Trzeci leży po drugiej stronie osi Y. Spójż na współrzędną X i spróbuj to sobie wyobrazić. glEnd() mówi, że nie będzie już więcej wierzchołków. Zostanie narysowany wypełniony trójkąt. Oczywiście do tych współrzędnych zostaną dodane lub odjęte te z glTranslatef() w celu przemieszczenia.
Mamy już trójkąt. Teraz przesuniemy się na drugą stronę ekranu aby narysować kwadrat. Użyjemy oczywiście glTranslatef(). Tym razem X będzie wartością dodatnią, bo rysujemy po drugiej stronie (0 jest w połowie ekranu, ujemne po lewej, a dodatnie po prawej). Ponieważ wcześniej użyliśmy glTranslatef() i poruszyliśmy się 1.5 w lewo, teraz musimy powrócić na środek i jeszcze wyjść tyle samo na drugą stronę. Łącznie wyjdzie 3.0 jednostki (1.5 do powrotu na środek i 1.5 na prawo). Na osi Z pozostaniemy w -6.0
Teraz narysujemy kwadracik. Użyjemy GL_QUADS. "Quad" to czworokąt. Coś idealnego do narysowania kwadratu. Kod rysujący kwadrat jest bardzo podobny do tego z trójkąta. Jedyna różnica to GL_QUADS zamiast GL_TRIANGLES i jeden więcej wierzchołek (kwadrat ma ich 4). Kwadrat będziemy rysować zgodnie z ruchem wskazówek zegara: najpierw górny lewy wierzchołek, później górny prawy, później dolny prawy no i dolny lewy. Kolejność rysowania ma znaczenie, gdyż od tego zależy w którą stronę zwrócony jest kwadrat. Rysowanie zgodnie z ruchem wskazówek zegara stworzy kwadrat zwrócony do nas, ale to teraz nieważne.
Pozostaje kwestia jednostek. Czym one są? Metrami? centymetrami? Nie. Jednostki możesz sobie dostosować do włanych potrzeb. Np. Człowieka możesz zrobić o wysokości 45 jednostek. W tej lekcji dokładnie wyjaśniłem jak należy rysować kwadraty i trójkąty używając OpenGL. Jeśli nie rozumiesz zasad działania współrzędnych, pobaw się kodem, pozamieniaj wartości. Może cię olśni.