Ansichtstransformation (Direct3D 9)
In diesem Abschnitt werden die grundlegenden Konzepte der Ansichtstransformation vorgestellt und details zum Einrichten einer Ansichtstransformationsmatrix in einer Direct3D-Anwendung bereitgestellt.
Die Ansichtstransformation findet den Betrachter im Weltraum und wandelt Scheitelpunkte in den Kameraraum um. Im Kamerabereich befindet sich die Kamera bzw. der Betrachter am Ursprung und sieht in positiver Z-Richtung aus. Denken Sie daran, dass Direct3D ein linkshändiges Koordinatensystem verwendet, sodass z in einer Szene positiv ist. Die Ansichtsmatrix verschiebt die Objekte in der Welt um die Position einer Kamera – den Ursprung des Kameraraums – und die Ausrichtung.
Es gibt viele Möglichkeiten, eine Ansichtsmatrix zu erstellen. In allen Fällen hat die Kamera eine logische Position und Ausrichtung im Weltraum, die als Ausgangspunkt zum Erstellen einer Ansichtsmatrix verwendet wird, die auf die Modelle in einer Szene angewendet wird. Die Ansichtsmatrix übersetzt und dreht Objekte, um sie im Kamerabereich zu platzieren, wo sich die Kamera am Ursprung befindet. Eine Möglichkeit zum Erstellen einer Ansichtsmatrix besteht darin, eine Übersetzungsmatrix mit Drehungsmatrizen für jede Achse zu kombinieren. Bei diesem Ansatz gilt die folgende allgemeine Matrixgleichung.
In dieser Formel ist V die Ansichtsmatrix, die erstellt wird, T ist eine Übersetzungsmatrix, die Objekte in der Welt neu positioniert, und Rₓ bis Rz sind Rotationsmatrizen, die Objekte entlang der x-, y- und z-Achse drehen. Die Übersetzungs- und Drehungsmatrizen basieren auf der logischen Position und Ausrichtung der Kamera im Weltraum. Wenn also die logische Position der Kamera in der Welt 10,20,100> beträgt<, besteht das Ziel der Übersetzungsmatrix darin, Objekte um 10 Einheiten entlang der x-Achse, -20 Einheiten entlang der y-Achse und -100 Einheiten entlang der Z-Achse zu verschieben. Die Rotationsmatrizen in der Formel basieren auf der Ausrichtung der Kamera, d. h., wie stark die Achsen des Kameraraums aus der Ausrichtung mit dem Weltraum heraus gedreht werden. Wenn die oben erwähnte Kamera beispielsweise gerade nach unten zeigt, ist ihre Z-Achse 90 Grad (pi/2 Bogenmaß) außerhalb der Ausrichtung mit der Z-Achse des Weltraums, wie in der folgenden Abbildung dargestellt.
Die Drehungsmatrizen wenden Drehungen der gleichen, aber entgegengesetzten Größe auf die Modelle in der Szene an. Die Ansichtsmatrix für diese Kamera enthält eine Drehung von -90 Grad um die x-Achse. Die Drehungsmatrix wird mit der Übersetzungsmatrix kombiniert, um eine Ansichtsmatrix zu erstellen, die die Position und Ausrichtung der Objekte in der Szene so anpasst, dass ihre obere Seite der Kamera zugewandt ist, sodass sich die Kamera über dem Modell befindet.
Einrichten einer Ansichtsmatrix
Die Hilfsfunktionen D3DXMatrixLookAtLH und D3DXMatrixLookAtRH erstellen eine Ansichtsmatrix basierend auf der Kameraposition und einem Blickpunkt.
Im folgenden Beispiel wird eine Ansichtsmatrix für linkshändige Koordinaten erstellt.
D3DXMATRIX out;
D3DXVECTOR3 eye(2,3,3);
D3DXVECTOR3 at(0,0,0);
D3DXVECTOR3 up(0,1,0);
D3DXMatrixLookAtLH(&out, &eye, &at, &up);
Direct3D verwendet die Welt- und Ansichtsmatrizen, um mehrere interne Datenstrukturen zu konfigurieren. Jedes Mal, wenn Sie eine neue Welt- oder Sichtmatrix festlegen, berechnet das System die zugeordneten internen Strukturen neu. Das häufige Festlegen dieser Matrizen ist rechenaufwändig. Sie können die Anzahl der erforderlichen Berechnungen minimieren, indem Sie Ihre Welt- und Ansichtsmatrizen in einer Weltansichtsmatrix verketten, die Sie als Weltmatrix festlegen, und dann die Ansichtsmatrix auf die Identität festlegen. Behalten Sie zwischengespeicherte Kopien einzelner Welten bei, und zeigen Sie Matrizen an, die Sie ändern, verketten und die Weltmatrix nach Bedarf zurücksetzen können. Aus Gründen der Übersichtlichkeit wird diese Optimierung in den Beispielen selten verwendet.
Zugehörige Themen