Prof. Dr. Dirk Lebiedz M. Sc. Mladjan Radic Institut für Numerische Mathematik Universität Ulm WiMa-Praktikum II (Numerik) Wintersemester 15/16 Projekt 2 - 3d-Bilder I. Theorie verstehen In diesem Projekt erzeugen wir 3d-Bilder, sodass bei Betrachtung des Bildes mit einer Rot-CyanBrille (RC-Brille) ein 3d-Effekt entsteht. Wie im ersten Projekt ist eine 3d-Szene mit Position des linken und des rechten Auges gegeben. Weiter definiert man sich eine Nullebene, welche sozusagen das Schaufenster darstellt, durch das man die Szene betrachtet. Alle Objekte die sich von den Augen aus gesehen hinter der Nullebene befindet erscheinen im 3d-Bild ’hinter dem Bildschirm’, alle Objekte die sich zwischen Nullebene und den Augen befinden ’kommen aus dem Bildschrim heraus’. Funktionsweise der RC-Brille: Um einen 3d Effekt zu erzeugen muss man die 3d-Szene für jedes Auge separat auf die Nullebene projezieren (siehe Abbildung). Man erhält also zwei Bilder auf der Nullebene, eins für das linke Auge und eins für das rechte Auge. Beide Bilder werden nun in RGB-Bilder konvertiert. Während wir für das Nullebene ** * * R L Bild des linken Auges nur den R-Farbton extrahieren extrahieren wir für das Bild des rechten Auges den Cyan-Farbton (also GB-Farbton). Am Ende legen wir beide Bilder übereinander. Da das linke Auge durch die Szene durch den roten Teil der RC-Brille sieht, wird der rote Farbton im resultierenden Bild vom linken Auge nicht gesehen. Das rechte Auge betrachtet die Szene durch den Cyan Teil der Brille, somit ist für das rechte Auge der Cyananteil im Bild nicht zu sehen. Beide Augen sehen also die Szene aus verschiedenen Blickwinklen und es entsteht ein 3d-Effekt. II. Aufgabenstellung • Theorie-Aufgaben (i) Berechnen Sie die Projektion eines Punktes vom Auge aus auf die gegebene Nullebene. (ii) Geben Sie Transformationsmatrizen für Rotation um die Koordinatenachsen, Translation und Skalierung an. Beachten Sie dabei, dass die Transformationsmatrizen in den 4 dimensionalen Raum eingebettet werden, d.h. wir erhalten 4 × 4-Matrizen! • Programmier-Aufgaben (i) Schreiben Sie eine Funktion getMotion.m, die für einen gegebenen String motion∈{’rotx’,’roty’,’rotz’,’zoom’} die entsprechende Transformationsmatrix zurückgibt. Sie können die Funktion auch erweitern, sodass beliebige Transformationen überlagert werden. (ii) Schreiben Sie eine Funktion projection.m, die für eine gegebene Augenposition eye und eine zur x-z-Ebene parallelen Ebene E die Projektion der Koordinaten coord auf die Ebene E zurückgibt. (iii) Schreiben Sie eine Funktion get3dframe, die zu gegebenem coord, eyeL, eyeR und box einen Frame mit dem fertigen 3d-Bild zurückliefert. Verwenden Sie in der Funktion die MatlabRoutine getframe. (iv) Modifizieren Sie Ihren Code, sodass auch eine komliziertere Figure mit einer komplizierteren Bewegungen relaisiert wird und erzeugen Sie ein Video.