Mgr inż. Paweł Macioł
Grafika Komputerowa
Zadania z OpenGL do wykonania
Napisz program symulujący tarczę zegara. Program powinien rysować tarczę ze wskazówkami wskazującymi aktualną godzinę.
Napisać aplikację symulującą uproszczony trójwymiarowy model atomu z krążącymi wokoło jądra elektronami. Liczba powłok elektronowych (główna liczba kwantowa: n = 1,2,3…) oraz maksymalne ilość elektronów w powłoce to parametry zadane na wejściu programu. Elektrony tej samej powłoki powinny poruszać się po orbitach (o promieniach zadanych) wokół jądra, których płaszczyzny są wzajemnie skośne. Liczba elektronów w danej powłoce oraz wzajemne ułożenie orbit należy określać w sposób losowy. Program powinien dostarczać interaktywną funkcjonalność poprzez mysz: wciśnięty lewy klawisz myszy i ruch – obserwator porusza się wokoło jądra; prawy klawisz myszy i ruch pionowy – zbliżanie/oddalanie.
Import danych z pliku i interaktywna wizualizacja – w dołączonym pliku „banny.dat” znajduje się geometria siatki królika. Królik spoczywa na płaszczyźnie złożonej z 2-ch trójkątów. Plik jest zbiorem trójkątów z dodatkowymi parametrami:
from x y z – początkowa pozycja obserwatora w (x, y, z),
at x y z – punkt na który się patrzy obserwator,
up vx vy vz – współrzędne wektora zenitu kamery,
hither a – odległość „a” kamery od przedniej płaszczyzny tnącej (Znear),
resolution w h – wymiary okna,
b r g b – kolor tła (r,g,b),
l x y z r g b – położenie źródła światła (x,y,z) i jego kolor (r,g,b),
p 3 – oznacza wielobok o liczbie boków 3.
Program powinien wczytać dane z pliku i narysować zapisaną w nim geometrię z zadanymi parametrami – pozycją obserwatora, kolorem tła, itp., oraz umożliwiać użytkownikowi interaktywną wizualizację za pomocą myszy (patrz punkt 2). Królik powinien się rysować jako siatka pustych bądź wypełnionych trójkątów – można dodać funkcjonalność klawisz: w – wireframe (siatka szkieletowa); s – solid (siatka wypełnionych trójkątów). Dla chętnych (dodatkowo punktowane): oświetlić królika światłem z zadanej pozycji.
Uwaga. W zadaniu 2 proszę poczytać o stosie macierzy w OpenGL – funkcje glPushMatrix() i glPopMatrix(). W zadaniu 3 poczytać o oświetleniu.