Freigeben über


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 sucht den Betrachter im Weltraum und wandelt Scheitelpunkte in den Kamerabereich um. Im Kamerabereich befindet sich die Kamera oder der Betrachter am Ursprung, der in die positive Z-Richtung schaut. Denken Sie daran, dass Direct3D ein linkshändiges Koordinatensystem verwendet, sodass z in eine Szene positiv ist. Die Ansichtsmatrix verschlegt die Objekte in der Welt um die Position einer Kamera – den Ursprung des Kamerabereichs – und die Ausrichtung.

Es gibt viele Möglichkeiten zum Erstellen einer Ansichtsmatrix. In allen Fällen verfügt die Kamera über 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 Drehmatrizen für jede Achse zu kombinieren. Bei diesem Ansatz wird die folgende allgemeine Matrixgleichung angewendet.

Formel der Ansichtstransformation

In dieser Formel ist V die zu erstellende Ansichtsmatrix, T ist eine Übersetzungsmatrix, die Objekte in der Welt neu positioniert, und Rₓ bis Rz sind Drehungsmatrizen, die Objekte entlang der X-, Y- und Z-Achse drehen. Die Übersetzungs- und Drehmatrizen basieren auf der logischen Position und Ausrichtung der Kamera im Weltraum. Wenn also die logische Position der Kamera in der Welt <10.20.100>ist, besteht das Ziel der Übersetzungsmatrix darin, Objekte -10 Einheiten entlang der X-Achse, -20 Einheiten entlang der Y-Achse und -100 Einheiten entlang der Z-Achse zu verschieben. Die Drehungsmatrizen in der Formel basieren auf der Ausrichtung der Kamera, in Bezug darauf, wie viel die Achsen des Kameraraums aus der Ausrichtung mit dem Weltraum gedreht werden. Wenn die oben erwähnte Kamera beispielsweise gerade nach unten zeigt, beträgt ihre Z-Achse 90 Grad (Pi/2 Bogenmaß) außerhalb der Ausrichtung mit der Z-Achse des Weltraums, wie in der folgenden Abbildung dargestellt.

Abbildung des Sichtraums der Kamera im Vergleich zum Weltraum

Die Drehungsmatrizen wenden Drehungen gleich, aber entgegengesetzt 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 deren oberer Rand auf die Kamera gerichtet ist, wodurch die Kamera über dem Modell dargestellt wird.

Einrichten einer Ansichtsmatrix

Die D3DXMatrixLookAtLH und D3DXMatrixLookAtRH Hilfsfunktionen 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 Ansichtsmatrix festlegen, berechnet das System die zugehörigen 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 eine Weltansichtsmatrix verketten, die Sie als Weltmatrix festlegen, und dann die Ansichtsmatrix auf die Identität festlegen. Behalten Sie zwischengespeicherte Kopien einzelner Welt- und Ansichtsmatrizen bei, die Sie nach Bedarf ändern, verketten und zurücksetzen können. Aus Gründen der Klarheit setzen die Proben diese Optimierung selten ein.

Transformationen