Model jajka w OpenGL

egg lights

egg multicolor

W niniejszym wpisie przedstawię jak można stworzyć model jajka w OpenGL, naturalnie językiem, w którym jest napisany poniższy kod jest c++.

Kod zawiera klasę Egg, w której konstruktor tworzy dwuwymiarową tablicę dwu-punktów n na n w przedziale od 0 do 1. Oraz tablicę kolorów wypełnioną pseudolosowymi wartościami. Następnie jest tworzona tablica położeń trój-punktów (każda współrzędna – kolejno x, y, z) przy użyciu przekształceń matematycznych (słowem kilka ciekawych wzorów) z każdego elementu tablicy dwu-punktów.

Jeśli już przeglądałeś(-łaś) kod zapewne zauważyłeś(-łaś), że jest w nim wiele zmiennych globalnych, wszystkie oczywiście są używane, a na chwilę obecną uwagę skupmy na jednej z nich mianowicie – model. Zmienna ta jest odpowiedzialna za rodzaj obrazu, jaki będzie finalnie rysowany. Sam obiekt Egg zawiera tylko listę punktów, a to co zostanie wyświetlone zależy właśnie od tej zmiennej. Do wyboru mamy kilka opcji, mianowicie: zbiór punktów, siatkę trójkątów, siatkę wypełnionych trójkątów z wektorami normalnymi (dla niewtajemniczonych wektor normalny to w skrócie wektor prostopadły o długości równej 1 do tzw. powierzchni, w tym przypadku jest to zbiór wektorów prostopadłych do naszego jajka w każdym z punktów, który jest rysowany, po co nam to, napiszę za chwilę), oraz siatkę wypełnionych trójkątów z nałożoną teksturą i obliczonymi wektorami normalnymi.

Program po skompilowaniu i uruchomieniu ma kilka ciekawych efektów dostępnych w OpenGL.  Jednym z nich jest obsługa klawiatury (wybranych przycisków zmieniających parametry wyświetlanego obrazu) oraz obsługa myszki. A jeśli nic nie jest w danym momencie wykonywane jajko obraca się wokół własnej osi (a konkretnie osi y). Teraz może wspomnę o klawiaturze, obsługiwane przyciski to:

  • p – wyświetlenie punktów z których składa się jajko
  • w – wyświetlenie jajka jako siatki trójkątów (połączone przy użyciu linii)
  • t – wypełnienie białymi trójkątami siatki trójkątów
  • s – wyświetlenie wypełnionych, kolorowanych trójkątów
  • i – włączenie/wyłączenie wyświetlania tekstury na jajku wraz z włączeniem światła białego
  • l – włączenie/wyłączenie oświetlenia białego
  • 1 (jeśli włączone jest światło białe lub niebieskie) – przełączenie źródła światła na czerwone lub wyłączenie
  • 2 (jeśli włączone jest światło białe lub czerwone) – przełączenie źródła światła na niebieskie lub wyłączenie

Teraz może wspomnę o obsłudze myszki. Jeśli naciśniemy lewy przycisk i przesuniemy urządzenie możemy obracać kamerą wokół. Wymaga to nieco wprawy ponieważ zastosowałem tutaj sferyczny układ odniesienia (zmianie ulegają kąty theta i fi), tak aby można było zobaczyć jajko z każdej strony. W zasadzie to jest wszystko co miałbym do napisania, na ten temat, ale zostawiłem jeszcze małą niespodziankę na koniec. Obsługa prawego przycisku myszki pozwala na poruszanie źródłem światła (ostatnio włączonym) po całej sferze wokół obiektu. Można zatem włączyć światło niebieskie i ustawić jego położenie, a następnie włączyć światło czerwone i również ustawić jego położenie.

A tutaj zamieszczam kod:

Ostatnia rzecz, o której chciałem wspomnieć to model oświetlenia jaki został wybrany nazwany jest modelem oświetlenia Phonga. Wybrałem go ponieważ daje on możliwie najbardziej zbliżone efekty do zwykłego oświetlenia.

egg points

egg textured

egg lights

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *