3D-Programmierung (Mathematik) Teil 01: Koordinatensysteme

Wer sich mit der 3D-Programmierung beschäftigen will, muss die zugrunde liegenden mathematischen Konzepte verstehen lernen. Bevor man überhaupt irgendetwas berechnen und darstellen kann, muss man zunächst einen Bezugsrahmen, ein so genanntes Koordinatensystem angeben. Mathematisch gesehen lässt sich ein Koordinatensystem auf unterschiedliche Arten definieren. Hierbei gilt jedoch, dass bei einem zweidimensionalen Koordinatensystem immer zwei, bei einem dreidimensionalen Koordinatensystem immer drei bzw. bei einem n-dimensionalen Koordinatensystem immer n voneinander unabhängige Koordinaten angegeben werden müssen. Das bekannteste Koordinatensystem ist mit Sicherheit das so genannte dreidimensionale kartesische Koordinatensystem, das aus drei zueinander senkrecht liegenden Achsen (x-, y- und z-Achse) gebildet wird. Je nach Anordnung der Achsen unterscheidet man zwischen Rechts- und Linkssystem (wird bevorzugt verwendet, z. B. von DirectX).


(Rechtssystem)

(Linkssystem)

Möchte man beispielsweise die Position der Erde angeben, dann bietet sich als Bezugsrahmen unser Sonnensystem an, mit der Sonne im Ursprung des Koordinatensystems. In einem dreidimensionalen Raum werden hierfür drei Positionsangaben benötigt, die zu einem Vektor (in diesem Fall zu einem Ortsvektor) zusammengefasst werden.
Grafisch kann man sich diesen Vektor als einen Pfeil veranschaulichen, der im Koordinatenursprung (bei der Sonne) beginnt und an der aktuellen Position (Ort) der Erde endet. Die Pfeilrichtung gibt die Lage der Erde und die Pfeillänge die Entfernung der Erde relativ zum Ursprung des Koordinatensystems an.
Möchte man die Geschwindigkeit der Erde angeben, dann kommt ein weiterer Vektor (der Geschwindigkeitsvektor) ins Spiel. Hierbei gibt die Pfeilrichtung die Bewegungsrichtung und die Pfeillänge den Geschwindigkeitsbetrag an.

Vektor = (x, y, z) = Betrag * Richtung

Für die Beschreibung der Bewegung der Erde um die Sonne ist das zuvor gewählte Bezugssystem gut geeignet. Möchte man jedoch die Erddrehung oder die Bewegung des Erdmondes beschreiben, dann sieht die Sache gleich ganz anders aus. Hier bietet sich die Wahl eines zweiten Bezugsrahmens an, ein lokales Koordinatensystem, mit dem Ursprung im Erdmittelpunkt. Arbeitet man mit verschiedenen Koordinatensystemen, dann müssen Koordinaten von einem System in Koordinaten eines anderen Systems umgerechnet werden:


Position des Mondes relativ zur Erde:
Mond_Erde = (xMond_Erde, yMond_Erde, zMond_Erde)

Position der Erde relativ zur Sonne:
Erde_Sonne = (xErde_Sonne, yErde_Sonne, zErde_Sonne)

Umrechnung führt zur Position des Mondes relativ zur Sonne:
Mond_Sonne = Mond_Erde + Erde_Sonne

Die Wahl der Sonne als Ursprung eines Koordinatensystems ist gut geeignet für die Simulation von Planetenbewegungen, die Wahl eines Planeten als Koordinatenursprung ist hingegen gut geeignet für die Simulation der Bewegung planetarer Monde. Im Rahmen eines Computerspiels sind die Sonne, die Planeten und Monde Teile der Spielewelt mit genau definierten Positionen im so genannten Weltkoordinatensystem (world space). Die Wahl des Koordinatenursprungs obliegt dem Spieleentwickler. Neben dem Weltkoordinatensystem spielen lokale Koordinatensysteme oder Modellkoordinatensysteme (model space) eine sehr wichtige Rolle. Entwirft man ein 3D-Modell in einem Modellierungsprogramm, definiert man die Vertices (Eckpunkte) des Modells in einem solchen Modellkoordinatensystem. Als Koordinatenursprung bietet sich hierbei der Modell-Schwerpunkt an. Wird ein Modell dann in den Grafikspeicher geladen, werden ebenfalls die Modellkoordinaten der Vertices gespeichert. Mithilfe dieser Koordinaten lassen sich dann im Vertex Shader Animationen und Drehbewegungen besonders leicht berechnen.

Innerhalb des Weltkoordinatensystems befindet sich zudem eine Kamera, aus deren Perspektive die 3D-Szene dargestellt wird. Die Kameraposition bildet den Ursprung des so genannten Kamerakoordinatensystems (view/camera space). Die Umrechnung von Welt- in Kamerakoordinaten funktioniert wie folgt:

Objekt_Kameraposition = Objekt_Weltposition - Kamera_Weltposition

Das dritte wichtige Koordinatensystem ist das so genannte Projektionskoordinatensystem (projection space) oder Bildschirmkoordinatensystem. Mithilfe einer Projektionsmatrix werden die Kamerakoordinaten eines 3D-Objekts in die zugehörigen Bildschirmkoordinaten umgerechnet, damit das Objekt an korrekter Position auf dem Bildschirm dargestellt werden kann.