SYNTEZA I OBRÓBKA OBRAZU
Ćw. 2 Przekształcenia obiektów w przestrzeni trójwymiarowej
Wykonujący: Ocena:
Specjalność: IDiO, sem. II/3 Data wykonania ćwiczenia:
Celem ćwiczenia jest zapoznanie studentów z metodami konwersji współrzędnych modeli obiektów 3D za pomocą przekształceń afinicznych. Podstawy teoretyczne zawarte są w prezentacji „Rendering obrazu 3D” do wykładu z przedmiotu. Ćwiczenie wykonywane będzie w programie Matlab, z wykorzystaniem pakietu matGeom.
Należy wykonać kolejne polecenia i zanotować w sprawozdaniu w zaznaczonych ramkach wnioski i odpowiedzi na pytania. Sprawozdanie ma być wypełnione elektronicznie (w pliku). W nazwie pliku należy podać nazwiska osób wykonujących ćwiczenie. Po zakończeniu zajęć należy plik ze sprawozdaniem umieścić w systemie sprawozdań.
Zadanie 1 – reprezentacja modelu przykładowego obiektu
Uruchomić program Matlab. Zmienić katalog roboczy na D:\SyntezaObrazu\SO2 (ew. dysk E). Uruchomić skrypt setupMatGeom. Utworzyć siatkę wielokątową sześcianu za pomocą komendy:
[V E F] = createCube;
Wykonać wykres siatki obiektu za pomocą komendy:
drawMesh(V, F, color)
gdzie color oznacza definicję koloru wg Matlaba, np. ‘blue’, ‘green’, itp. Można pominąć ten parametr, domyślnie jest stosowany kolor czerwony.
Matlab tworzy wykres w widoku 2D, zatem trzeba zaznaczyć ikonę trybu obrotu i obrócić wykres przy pomocy myszy, albo wykonać komendy:
view(3); axis('vis3d');
Uwaga ta dotyczy każdego przypadku, w którym tworzymy nowy wykres.
Wyświetlić zawartość macierzy V, E, F. Na podstawie analizy ich zawartości podać jakie informacje zawiera każda z tych macierzy.
Zadanie 2 – macierze przekształceń afinicznych
Utworzyć macierze dla poniższych przekształceń afinicznych. Parametry funkcji zastąpić odpowiednimi liczbami (najlepiej różnymi).
T = createTranslation3d(DX, DY,
DZ) Przesunięcie o wektor [DX,DY,DZ]
S = createScaling3d(SX, SY, SZ) Skalowanie o wsp. SX, SY, SZ
RX = createRotationOx(thetaX) Obrót o kąt thetaX [radiany] wokół osi X
RY = createRotationOy(thetaY) Obrót o kąt thetaY [radiany] wokół osi Y
RZ = createRotationOz(thetaZ) Obrót o kąt thetaZ [radiany] wokół osi Z
Dokonać przekształcenia oryginalnego sześcianu za pomocą każdej z macierzy, np.:
Wypisać zawartość przekształconych współrzędnych i wykreślić je razem z oryginalnym sześcianem (uwaga: dopóki nie zamkniemy okna wykresu, kolejne wykresy są rysowane w tym samym oknie, co pozwala nakładać na siebie różne obiekty). Sprawdzić czy wyniki są zgodne z oczekiwaniami.
Zadanie 3 – składanie przekształceń
Przekształcić oryginalny sześcian za pomocą najpierw operacji przesunięcia, a następnie wynik tej operacji – za pomocą dowolnego obrotu. Następnie obliczyć iloczyn obu macierzy użytych do przekształceń i zastosować go do oryginalnego sześcianu. Na tej podstawie określić w jaki sposób obliczana jest macierz złożonych przekształceń afinicznych, jaka musi być kolejność mnożenia macierzy składowych przekształceń.
Zadanie 4 – środek obrotu
Przesunąć oryginalny sześcian o wektor [2, 3, 0], a następnie dokonać obrotu obiektu wokół osi Z o 45 stopni (pi/4) w lewo. Wykreślić sześcian przed i po obrocie. Który punkt jest środkiem obrotu?
Wykonać operacje na oryginalnym sześcianie prowadzące do obrotu o 45 stopni (pi/4) w lewo wokół osi Z, tak aby oś sześcianu pozostała w tym samym miejscu. Zapisać wykonywane operacje poniżej, zweryfikować poprawność za pomocą wykresu.
Zadanie 5 – budowanie złożonej sceny
Używając jednostkowego sześcianu utworzonego za pomocą komendy createCube jako szablonu, zbudować piramidę złożoną z czterech sześcianów, zgodnie z podanymi niżej zasadami, tak aby uzyskać wynik jak na przykładowym rysunku. Wskazówka: jako punkt obrotu i skalowania najlepiej jest przyjąć punkt leżący w samym środku sześcianu.
Geometryczne środki wszystkich sześcianów leżą na jednej osi, przechodzącej przez środek podstawy najniższego sześcianu i prostopadłej do niej.
Pierwszy sześcian (najniższy) jest umieszczony w oryginalnej pozycji.
Każdy z sześcianów poza pierwszym jest zmniejszony w stosunku do stojącego niżej – długość jego krawędzi wynosi 0,8 * długość krawędzi niższego sześcianu.
Drugi i trzeci sześcian są obrócone wokół osi Z o 45 stopni (pi/4) względem sześcianu stojącego niżej.
Czwarty, najwyższy sześcian „stoi” na wierzchołku. Wskazówka: połowa długości przekątnej sześcianu o długości boku a jest równa a * sqrt(3) / 2.
Zwrócić uwagę na kolejność przekształceń. Wynik pokazać na wykresie – każdy sześcian powinien mieć inny kolor. Zweryfikować poprawność wyniku obracając wykres myszką w trybie rotacji.