WOJSKOWA AKADEMIA TECHNICZNA
im. Jarosława Dąbrowskiego
Laboratorium z przedmiotu
Grafika Komputerowa
SPRAWOZDANIE
Z ĆWICZENIA LABORATORYJNEGO
nr 4
Temat ćwiczenia: Modelowanie Oświetlenia
Prowadzący: kpt. Wojciech Sulej
Wykonał: Bartłomiej Sujkowski
Grupa: I8Y4S1
Data wykonania ćwiczenia: 26.01.2009
Treść zadania
Ustawienie świateł materiałów i definicje
Funkcja wykorzystuje zadeklarowane wcześniej tablice dwuwymiarowe jako argumenty wykorzystywane we wnętrzu. Kolejne wartości ustawiane przez funkcje glMaterialfv() mają następujące znaczenia:
- GL_FRONT - opisywana jest frontowa płaszczyzna prymitywów (można również użyć GL_BACK - tylna płaszczyzna oraz GL_FRONT_AND_BACK - obie płaszczyzny)
- GL_AMBIENT - światło otaczające, nie pochodzi z żadnego kierunku, choć ma źródło.
Wszystkie obiekty na scenie są nim równomiernie oświetlone ze wszystkich stron i na
wszystkich powierzchniach.
- GL_DIFFUSE - światło rozproszone. W przeciwieństwie do poprzedniej składowej ma zdefiniowane źródło. Jasność powierzchni zależy od kąta, pod jakim pada na nią światło.
Światło rozproszone padające jest traktowane jako kierunkowe, w przypadku światła
odbitego już jako bezkierunkowe.
- GL_SPECULAR - światło odbłysków, ma kierunek i jest odbijane od powierzchni w jedną stronę.
- GL_SHININESS - współczynnik tłumienia. Opisuje ile energii powinno być odbite od
powierzchni zazwyczaj ściśle powiązany z GL_SPECULAR (właściwości emisyjne można opisać za pomocą GL_EMISSION) .
Tablice opisu materiału określają jego parametru za pomocą wektora RGBA (reed green blue alfa) z czego każda składowa mieści sie w przedziale <0;1>. Wyjątkiem w tym przypadku jest atrybut GL_SHININESS, który ma jeden parametr z przedziału <0; 27>.
Ustawienie światła reflektora i światła kierunkowego.
Przedstawione funkcje określają i uruchamiają dwa rodzaje światła: kierunkowe włączane przez Swiatlo_glowne(); reflektora włączane przez funkcje Swiatlo_reflektor(). Bazują one podobnie jak funkcje opisujące materiał na macierzach o składowych wektorów RGBA. Obydwie funkcje są wywołane po narysowaniu obiektu (w funkcji RysujElipsoide();). Bardziej złożona w tym przypadku
jest funkcja Swiatlo_reflektor() i to jest jeden z powodów dlaczego omówię przykład modelowania światła właśnie na jej podstawie. Drugim aspektem jest to iż funkcja Swiatlo_glowne() nie wnosi praktycznie żadnych nowych teoretycznych wiadomości do jej poprzedniczki.
Procedura zaczyna i kończy się od odłożenia na stosie macierzy i kończy się jej zdjęciem. Takie postępowanie jest uzasadnione tym iż w jej wnętrzu jest rysowana sfera która służy jako graficzne zobrazowanie miejsca źródła światła. Źródło to jest obracane wokół osi OY na podstawie zmiennej kąt (jest ona albo automatycznie inkrementowana/dekrementowana w funkcji WyswietlObraz(); bądź zmieniana o ustalony skok z klawiatury), nachylane do osi OZ pod kątem określonym przez
zmienną kat_z (ustalaną przez operatora z klawiatury) oraz jest oddalane lub przybliżane do obiektu na podstawie zmiennej R_L1 ustalanej z klawiatury. Następnie jest rysowana zapowiedziana przeze mnie wcześniej sfera wraz z paroma „kosmetycznymi” detalami. Właściwa część zaczyna się dopiero w tym miejscu. Funkcja glLightfv(); ustawia parametry światła posługując się parametrami:
- GL_LIGHTi - określa numer źródła światła charakteryzowany w danej chwili gdzie i należy do przedziału <0;7>).
- GL_DIFUSE - jak w przypadku materiału.
- GL_SPECULAR - działanie zbliżone do wykorzystanego w opisie materiału.
- GL_POSITION - pozycja źródła w układzie współrzędnych.
- GL_SPOT_CUTOFF - kąt odcięcia czyli kąt, w którym źródło oświetla przedmiot.
- GL_SPOT_DIRECTION - wektor kierunku padania światła ze źródła.
- GL_SPOT_EXPONENT - kątowe tłumienie światła. Domyślnie przyjmuje wartość 0 (brak tłumienia), maksymalnie może to być 27. Im większa wartość tym bardziej skupiona jest wiązka.
Światło jest włączane za pomocą funkcji glEnable(); natomiast wyłączane za pomocą glDisable();.
Parametrami tych funkcji są numery źródeł świateł natomiast aby światło działało po wywołaniu takiej konstrukcji należy uprzednio odblokować oświetlenie za pomocą glEnable(GL_LIGHTING); Włączać jak i wyłączać oświetlenie możemy obsługiwać zadeklarowanymi wcześniej klawiszami.
Funkcja rysująca elipsoidę o zmiennej parzystej liczbie podziałów poziomych i pionowych.
Funkcja ta wyrysowuje ¾ elipsoidy i pokrywa ją materiałami zmieniając ich kolor co odpowiednio co drugi „pas pionowy” który jest rysowany. Dodatkowo uruchamia przedstawioną powyżej funkcję Światło_reflektor(); która jest odpowiedzialna za wyrysowanie i dołączenie do elipsoidy i jej układu współrzędnych reflektora.
Sposobu rysowania elipsoidy nie będę omawiał, gdyż robiliśmy to na drugich laboratoriach.
Sterowanie
Elipsoidę obraca się klawiszami „w” „s” „a” „d” zgodnie z ich rozmieszczeniem, dodatkowo można ją obrócić wokół jednej z osi klawiszami „q” i „e”.
Klawisze „1”, „2” służą za zwiększanie/ zmniejszanie liczby podziałów wzdłuż, natomiast „3” i „4” w poprzek (podziałami pionowymi).
Klawisz „f” - włącza reflektor, natomiast „F” wyłącza.
Klawisz „g” - włącza światło kierunkowe, natomiast „G” wyłącza.
Dodatkowo obiekt można przybliżyć i oddalić klawiszami „+” i „-„
Klawisze „z” i „Z” odpowiadają za oddalanie i przybliżanie się reflektora do obiektu, natomiast klawisze ”c” i „C” za ruch wzdłuż jednej z osi obiektu.
Prezentacja działania programu:
Screen pierwszy: ¾ elipsoidy oświetlone światłem reflektora.
Screen drugi ze światłem kierunkowym, zmienioną liczbą podziałów przybliżony i obrócony.
Screen przedstawiający razem działające oświetlenia jak widać oświetlenie kierunkowe jest stale natomiast reflektor oświetla obiekt z innej strony.
Wnioski
Podczas ćwiczenia zadaniem było zamodelowanie figury o zadanym w treści stylu,
materiale i oświetleniu. Celem było zaprzyjaźnienie się z rolą światła oraz oświetlenia w modelowaniu brył oraz nakładaniu na nich materiału. Umiejętne posługiwanie się
oświetleniem pozwala ożywić i stworzyć scenę bliższą rzeczywistemu odpowiednikowi danego obiektu. Wykorzystanie wielu świateł pozwala wzmocnić to złudzenie.
Zadanie jakie mieliśmy wykonać podczas laboratorium było według mnie nastawione na przyswojenie podstawowej wiedzy o oświetleniu i materiałach. Miało ono też służyć jako przykład mieszania się rożnych materiałów z rożnym światłem.
Sądzę, iż zadanie wykonane zostało poprawnie i zgodnie z założeniami postawionymi w treści.