Tekstury w OpenGL


Choć kafelkowanie jest domyślnym procesem, funkcja inicjuj_scene() może wyraźnie zaakcentować chęć używania kafelków:

procedure TForm1.inicjuj_scene;

begin

...

glEnable(GL_TEXTURE_2D);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S

GL_REPEAT);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T

GL_REPEAT);

end;

Tekstury w OpenGL

Rysunek 7. Przeciwieństwem kafelkowania jest rozmazywanie ostatniej linii pikseli na pozostałą część rysunku - styl GL_CLAMP. Może przyda się podczas budowania murów, płotów, lamperii, zasłon?

Tekstury w OpenGL

Rysunek 8. Interaktywna aplikacja, ilustrująca zasady kafelkowania i rozmazywania tekstur.

Tekstury w OpenGL

Rysunek 9. Tekstury można także oświetlać!

Pierwszy z wyróżnionych wierszy dotyczy kierunku poziomego, drugi pionowego. Ostatni parametr uaktywnia kafelkowanie, ale sprawdźmy, co się stanie, gdy przyjmie wartość GL_CLAMP (rozmaż):

...

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T

GL_CLAMP);

...

Rysunek 7 przedstawia następującą sytuację: w kierunku pionowym mamy rozmazywanie, w poziomym kafelkowanie. Widzimy, że rozmazaniu uległ ostatni wiersz tekstury (lub ostatnia kolumna, gdybyśmy rozmazywali w poziomie).

Wśród plików przykładowych znajduje się prosta, interaktywna aplikacja, która w dynamiczny sposób ilustruje kafelkowanie i rozmazywanie tekstur (rys. 8).

Tekstury i oświetlenie

Na zakończenie tych rozważań wróćmy do aplikacji napisanej w poprzedniej części kursu - wirującej, oświetlonej kostki. W jednym z przykładów w funkcji inicjuj_scene() opisaliśmy światło, które padało na kostkę, określiliśmy także optyczne właściwości jej powierzchni. Teraz na tę kostkę dodatkowo nałożymy teksturę.

Program uzupełnimy o standardową, dzisiaj już wielokrotnie przywoływaną procedurę odczytu mapy bitowej i generacji tekstury. W funkcji inicjuj_scenę() dodamy wiersz uaktywniający teksturowanie. W funkcji rysuj_scene() do wybranych ścianek (w naszym przykładzie do czterech ścianek bocznych) w standardowy sposób przypniemy teksturę. Okazuje się, że to proste połączenie algorytmów oświetlania z teksturowaniem daje w pełni zadowalający efekt - nasza pokryta teksturą kostka nadal odbija światło i co pewien czas rozbłyskuje refleksem. Odpowiedni program ilustrujący tę sytuację znajduje się w materiałach źródłowych.

Co dalej?

Potrafimy umieszczać na scenie różne obiekty, rozstawiać światła, deklarować właściwości optyczne materiałów, a także nanosić na nie tekstury i dynamicznie je wymieniać. Za miesiąc napiszemy o przezroczystości obiektów.