Teksturowanie

Te zajęcia są kontynuacją poprzednich Zalecam wykorzystać ukończony kod z poprzednich zajęć. Projekt startowy jest tylko częściowo ukończonymi zadaniami

Zadanie

Obejrzyj plik Texture.h, aby zapoznać się z interfejsem do obsługi tekstur.

Przygotuj shadery i załaduj teksturę:

W kolejnych zadaniach będziemy potrzebować trzecią parę shaderów: shader_5_tex.vert i shader_5_tex.frag są one gotowymi shaderami z poprzednich zadań. Wczytaj shadery i przechowaj adres programu pod zmienną globalną programTex.

Pod namespace texture znajdują się zmienne globalne typu Gluint, które będą przechowywać adresy tekstur. W funkcji init() załaduj tekstury z folderu textures przy pomocy Core::LoadTexture. Ta funkcja zwraca adres do wczytanej tekstury, przypisz je do zmiennych z namespace texture. (odwołanie się do namespace wykonuje się za pomocą ::, czyli by odwołać się do grid w namespace texture należy napisać texture::grid)

Stwórz funkcje odpowiadająca za rysowanie teksturowanych obiektów. Skopiuj funkcję drawObjectColor. Nazwij kopię drawObjectTexture() i zmodyfikują ją tak, aby przyjmowała jako parametr identyfikator tekstury, a nie wektor koloru. (Usuń w niej linijkę odpowiadającą za przesyłanie koloru, żeby uniknąć błędu komunikacji, później dodamy na jej miejsce ładowanie tekstury).

Zmodyfikuj shader tak, aby nakładał teksturę na obiekt:

Narysuj jedną z planet za pomocą drawObjectTexture(), użyj programTex jako programu.

  1. Prześlij współrzędne mapowania tekstur z vertex shadera do fragment shadera
  1. Prześlij teksturę do fragment shadera:
  1. Użyj wartości uzyskanej z tekstury zamiast koloru (objectColor) do pokolorowania obiektu:

Pobaw się mechanizmem teksturowania:

Zadanie *

Nadaj jakieś tekstury wszystkim obiektom, które znajdują się w scenie.

Multitexturing

W tej części pokażemy jak wykorzystać więcej niż jedną teksturę przy rysowaniu obiektu na przykładzie zachmurzonej Ziemi.

Zadanie

Wykorzystamy teksturę chmur jako maskę. Ustaw kolor Ziemi jako mix między białym a kolorem tekstury Ziemi a za współczynnik mieszania weź kanał r tekstury chmur.

Zadanie*

W podobny sposób wykorzystaj tekstury ship.jpg, scratches.jpg i rust.jpg, żeby dodać zarysowania do statku. Załaduj wszystkie trzy tekstury, użyj scratches.jpg jako maskę, która będzie wskazywała współczynnik, którym będziemy mieszać pomiędzy dwoma pozostałymi teksturami.

Teksturowanie proceduralne

  1. Stwórz czwartą parę plików z shaderami (np. shader_proc_tex.vert i shader_proc_tex.frag). Następnie zainicjalizuj program jak w I.6.a) i II.1.a) (nazwij go np programProcTex). Do wywołania rysowania wykorzystuj funkcję drawObject (Żeby nie tracić oteksturowanych planet, możesz rysować za ich pomocą wyłącznie statek).

  2. Prostym sposobem proceduralnego teksturowania, jest uzależnienie koloru od pozycji piksela w przestrzeni lokalnej (użycie przestrzeni świata spowodowałoby, że wzór na obiekcie zmieniałby się przy poruszaniu go).