I Oświetlenie Phonga

I.0. (Jeżeli nie zrobiłeś poprzednich zadań związanych z shaderami)

Obejrzyj pliki shader_4_1.vert i shader_4_1.frag. Zwróć uwagę w szczególności na zmienną interpNormal, przy uzyciu ktorej wektory normalne są przesyłane z vertex shaderze do fragment shadera. Pliki shader_4_2.vert i shader_4_2.frag na razie nie będą wykorzystywane

I.1. Oblicz we fragment shaderze oświetlenie obiektu przy użyciu modelu Phonga dla światła rozproszonego (diffuse):

  1. Przekaż źródło światła. Na razie przyjmiemy kierunkowy model oświetlenia, dlatego źródło będzie opisane jako wektor kierunkowy:
  1. Oblicz natężenie w shaderze fragmentów:
  1. Zastosuj obliczone natężenie aby zmodyfikować kolor obiektu:

I.2. Dlaczego oświetlenie statku nie zmienia się podczas jego obracania?

(Wektory normalne są w układzie lokalnym modelu, a wektor padania światła w układzie świata)

Należy wykonać transformacje wektorów normalnych do przestrzeni świata:

I.3. Uzupełnił model o czynnik światła odbitego (specular). W tym celu:

  1. Potrzebny będzie wektor od rysowanego fragmentu do pozycji kamery:
  1. Oblicz natężenie światła odbitego we fragment shaderze:
  1. Ustal ostateczny kolor piksela na objectColor * diffuse + vec3(1.0) * specular. Oznacza to najprostszy przypadek, gdy kolor światła odbitego jest biały.

I.4. Stwórz układ planetarny - jedna nieruchoma kule na środku (Słonce) i kilka orbitujących wokół niej planet.

Niech przynajmniej jedna planeta ma księżyce.

I.5. W układzie planetarnym obiektem oświetlającym powinno być słońce, dlatego zamień oświetlenie kierunkowe na punktowe:

I.6. Źródło światła znajduje się wewnątrz kuli, która reprezentuje słońce, dlatego jest czarna. By to naprawić utwórz osobny shader, który będzie odpowiadać za renderowanie słońca.

Celem tego zadania jest stworzenie shadera (shader_4_sun.vert_ i shader_4_sun.frag), który będzie odpowiadał wyłącznie za rysowanie słońca. Poprzednie shadery (shader_4_1.vert_ i shader_4_1.frag) nadal mają rysować pozostałe obiekty. a) zainicjalizuj program (shadery): - Pliki shader_4_sun.vert i shader_4_sun.frag są identyczne jak 4_1 przed zmianami, będą punktem wyjścia dla shadera słońca.

  1. W skomplikowanym projekcie różne typy obiektów rysuje się przy użyciu różnych shaderów, zate potrzebna jest w programie architektura, która na to pozwala. Ustaw odpowiedni program (shadery) do rysowania słońca:

I.7.* Zmień shader słońca na bardziej realistyczny.

Na poniższym obrazku jest zdjęcie słońca. jest ono ciemniejsze na brzegach spróbuj uzyskać podobny efekt. Przydadzą się wektory z poprzednich punktów, jak wektor normalny i wektor V.