OPEN GL – Światło Odbicie światła kierunkowego (specular light

Transkrypt

OPEN GL – Światło Odbicie światła kierunkowego (specular light
Dr Mirek Łątka
Grafika komputerowa
Jesień 2010
OPEN GL – Światło
Odbicie światła kierunkowego (specular light) od powierzchni zależy od
ich wzajemnej orientacji. Orientację płaszczyzny w przestrzeni
trójwymiarowej określamy podając współrzędne wektora normalnego do
tej powierzchni. Na poniższym diagramie normalne do płaszczyzny, w
ktorej leży trójkąt zostały narysowane dla każdego jego wierzchołka. Jest
to charakterystyczna cecha open GL. Przypomnij sobie, że także kolor
był własnością wierzchołka.
Zadanie obliczania normalnych spoczywa na programiście! Nie jest to na
szczęście zbyt skomplikowane. Rozważmy dwa wektory A=(Ax, Ay, Az) i
B=(Bx,By,Bz). Ich iloczyn wektorowy
jest prostopadły do płaszczyzny, w krórej leżą wektory A i B. Wektory
tworzymy w następujący sposób: A=P2-P1, B=P3-P1. Sposób oznaczania
wierzchołków nie jest rzecz jasna obojętny. Zwróć uwagę, że indeksy
wierzchołków rosną podczas przemieszczania się wzdłuż trójkąta
przeciwnie do ruchu wskazówek zegara.
Uwaga: jedną z przyczyn, dla których najczęściej tworzymy obiekty za
pomocą trójkatów jest to, że wierzchołki trójkąta zawsze leżą w tej samej
płaszczyźnie. Tak nie musi być w przypadku większej ilości punktów.
W openGL wektory normalne do powierchni mają zazwyczaj jednostkową
długość, mówiąć inaczej takie wektory są znormalizowane. Normalizacja
wektora A sprowadza się do podzielenia każdej składowej przez jego
długość:
Oto fragment kodu zaczerpnięty z projektu:
http://www.videotutorialsrock.com/opengl_tutorial/lighting/text.php
Cztery wierchołki tworzą ścianę sześcianu prostopadłą do osi z. Tak więc
normalna dla każdego wierchołka tej ściany jest taka sama i jest określona
za pomocą instrukcji glNormal3f.
1) Przeanalizuj wspomniany samouczek.
2) Napisz program, który implementuje ruch oświetlonej kuli,
glutSolidSphere(1,slices,stacks),
w
kierunku
obserwatora.
Wykorzystaj program omawiany na wykładzie lub kod z samouczka.
3) Dla odważnych: dodatkowe punkty możesz uzyskać implementując
mgłę (fog).
Przystępne omówienie światła w openGL znajdziesz także na stronie:
http://www.falloutsoftware.com/tutorials/gl/gl8.htm
Dodatek (mgła)
Oto dwa fragmenty kodu z porzednich zajęć uzupełnione o efekt mgły