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