Die Kamera in eine 3D Umgebung


Grundlagen

Die Kamera in einer 3D Umgebung ist rein mathematisch gesehen nur eine Basistransformationsmatrize. Nur wie wird diese erstellt ? Wenn man sich kurz überlegt, wie wir selber unsere Umgebung betrachten, dann fällt einem schnell auf, dass wir den Kopf nach oben bzw. unten und nach links und rechts drehen können. Die Blickrichtung ergibt sich also aus der Neigung des Kopfes. Mathematisch ausgedrückt sind dieses nun zwei normalisierte Vektoren, einer in x (Vektor u) und einer in y Richtung (Vektor v). Der letzte Vektor (Vektor w), welcher die Richtung bestimmt in die wir schauen kann durch das Kreuzprodukt der beiden Vektoren gebildet werden. Nehmen wir an man schaut um 45 Grad nach links und um 55 Grad nach oben. Zuerst drehen wir den u Vektor um 45 Grad über den v Vektor, danach drehen wir den v Vektor über den bereits gedrehten u Vektor um 55 Grad. Nun kann man das Kreuzprodukt bilden und erhält den w Vektor. Als letztes kann man noch mal den u und v Vektor um den w Vektor rotieren.

Rahmen1

Zusätzlich zu den nun gewonnenen Blickrichtungen besitzt die Kamera natürlich auch eine Position im Raum, welches wir durch den Vektor p beschreiben. Wir erhalten nun folgende Matrix:

Die Matrix M beschreibt nun aber die Transformation vom Kamerasystem in das Weltsystem. Wir aber benötigen die Transformation vom Weltsystem ins Kamerasystem, welches nichts anderes ist als die inverse Matrix M' von M. Möchte man nun ein homogenen Punkt P in das Kamerasystem transformieren, so multipliziert man ich einfach mit der Matrix M'.

Viewfrustum und Perspektive

Nach dem wir nun erfolgreich Objekte bzw. deren Punkte in der Kamerasystem übertragen können stellt sich nun die Frage, was ist jetzt alles sichtbar ? Dazu definieren wir uns zwei Ebenen, die Nearplane und die Farplane. Die Nearplane beschreibt den minimalen Abstand von der Kamera ab dem Objekte gesehen werden können und analog dazu die Farplane bis wohin Objekte gesehen werden können. Wie in Abbildung 1 zu erkennen ist, ist das Viewfrustum eine Pyramide. Diese Pyramide ist genau der Bereich, der auf unseren Bildschirm am Ende abgebildet soll. Da der Computerbildschirm keine Tiefe besitzt, geschweige denn eine Pyramide ist, muss das Viewfrustum zu einem „Einheitswürfel“ zusammengepresst werden. Dieses erreicht man durch eine geeignete Projektionsmatrix. Wir definieren nun zusätzlich zu den Abständen der Near- und Farplane die Abstände Bottom, Top, Left und Right bezüglich der Nearplane und erhalten nun folgende Projektionsmatrix:

Hierbei ist zu beachten, dass durch die Projektion die y – Koordinate negativ wird. Anschließend benötigen wir nun noch eine Projektion, welche die x- und y – Koordinaten vom Einheitswürfel auf den Bildschirm skaliert. Diese ist recht einfach. Sei w die Weite und h die Höhe vom Bildschirm so ergibt sich:



Da der Bildschirm ein anderes Koordinatensystem wie in der allg. Mathematik besitzt müssen wir noch einmal transformieren mit der Matrix:

Nun haben wir alle Matrizen die wir brauchen, um einen Punkt P vom Objektraum auf den Bildschirm zu projizieren. Sei T noch eine Matrix die eine affine Transformation beschreibt, so lauten die x und y Koordinaten nun:

Am Ende normieren wir den Punkt und erhalten somit die x – Koordinate, y – Koordinate vom Bildschirm sowie die z – Koordinate im Einheitswürfel, welche zwischen -1 und 1 liegt. Die w – Koordinate enthält den aktuellen tiefen Wert des Punktes im Weltsystem.



Index