2009-08-20 6 views
6

Ich habe einige ernste Probleme, die Ansichtsmatrix in XNA zu verstehen. Ich bin mit all den anderen Teilen ziemlich weit gekommen, und da ich gerade die erforderliche Mathematik gelernt habe, möchte ich die eingebauten Matrix-Funktionen nicht verwenden, ohne zu verstehen, was sie zuerst machen.XNA View Matrix - Ich suche Erklärungen

Jetzt verstehe ich die Grundlagen der Rotation, Projektion und Übersetzung, aber ich kann nicht für das Leben von mir verstehen, wie die Ansicht Matrix in XNA funktioniert.

Von dem, was ich gesammelt habe, sollte die Ansichtsmatrix die "Welt" in ihren eigenen Raum verwandeln. Scheint sinnvoll, aber die Matrix.CreateLookAt Methode in der Bibliothek ist ziemlich rätselhaft.

I hergestellt haben (durch die Prüfung, was die Bibliotheksfunktion Ausgänge), dass diese beiden Teile des Codes, die gleichen Ergebnisse Ausbeute:

Matrix view = Matrix.CreateReflection(new Plane(Vector3.UnitX, 0)) * Matrix.CreateReflection(new Plane(Vector3.UnitZ, 0)) * Matrix.CreateTranslation(Position); 
// ..equals this if (Position = (0 0 -5), since LookAt "looks at" but the above just looks straight down Z).. 
Matrix blah = Matrix.CreateLookAt(Position, Vector3.Zero, Vector3.UnitY); 

Warum die X und Z-Achsen-Flip? Ich dachte, du solltest die Welt entsprechend der Kamera drehen, aber in die entgegengesetzte Richtung, und dann die Welt um den gleichen Betrag in die entgegengesetzte Richtung übersetzen.

Oder wird die Ansichtsmatrix überhaupt nicht als Transformation verwendet, sondern codiert nur die Position und Drehung der Kamera in der Welt?

Antwort

5

Die Ansichtsmatrix verwandelt die Szene in den Ansichtsbereich. Im Blickfeld befindet sich die virtuelle Kamera im Ursprung und schaut in die positive z-Richtung. Es gibt verschiedene Wege, dies zu erreichen, aber meistens besteht die Ansichtsmatrix aus einer Translation und drei Rotationen um jede Achse.

Trans = Übersetzen * rotationZ * RotationY * RotationX

+0

Danke, es scheint, dass meine ursprüngliche Idee richtig war. Aber ich hatte alle diese verschiedenen Koordinatensysteme ein wenig verwirrt. – Skurmedel

1

das Zusammensetzen von zwei Reflexionen ergibt eine Drehung, wenn ich mich an meine Geometrie richtig erinnere.

+0

Interessant. Die oben erwähnten Reflexionen sollten dann einer Drehung um 180 ° um Y entsprechen. – Skurmedel

21

Es gibt drei Arten von Transformationen, die Sie verstehen müssen: Welt, Ansicht und Projektion.

Die Weltumwandlung ändert Ihre Modellkoordinaten vom Modellraum in den Weltall. Wenn Sie die Eckpunkte eines Modells definieren, definieren Sie diese relativ zum Ursprung des Modells. Die Welt-Transformation transformiert diese Scheitelpunkte so, dass sie relativ zu einem Ursprung sind, der von allen Objekten in der Szene, d. H. Dem Welt-Raum, geteilt wird.

Die Ansichts-Transformation transformiert diese Scheitelpunkte in den Ansichtsbereich. Der Betrachter/die Kamera hat im Ansichtsbereich eine Position und Orientierung, aus der die Ansichtsmatrix erstellt wird, die Sie auf alle Objekte in der Szene anwenden. Im Ansichtsbereich befindet sich der Betrachter/die Kamera im Ursprung, so dass die Ansichtsmatrix alle Objekte übersetzt und dreht, um sie in den Ansichtsraum zu platzieren.

Schließlich bestimmt die Projektionstransformation, welche Art von "Objektiv" die Kamera verwendet. Bis jetzt haben wir nur Objekte übersetzt und gedreht, es gibt keinen Sinn für Maßstab oder Perspektive. Die Projektionstransformation erstellt einen Ansichtsfrustum und transformiert Scheitelpunkte in dieses Ansichtsfenster.

Jetzt für Ihre Frage. Sie reflektieren das Koordinatensystem um die x-Achse, dann die z-Achse und schließlich übersetzen Sie es. Dies führt zu demselben Ergebnis wie die Lookat-Matrix, da die Position auf der xz- und yz-Ebene liegt. Beachten Sie jedoch, was passiert, wenn Sie die Position um eine Einheit auf der y-Achse verschieben. Dann sind die beiden Matrizen nicht gleich

+1

Danke für deine Antwort. Ich wählte die Antwort mit dem niedrigsten Rang. Sie haben beide geholfen. – Skurmedel

+2

Keine Sorgen. Froh, dass du es herausgefunden hast :) – Tchami

4

Der folgende Link half mir sehr zu verstehen und effektive Matrizen verwenden.Sie könnten sie interessant finden:

http://stevehazen.wordpress.com/2010/02/15/matrix-basics-how-to-step-away-from-storing-an-orientation-as-3-angles/

Ich bin relativ die gleiche Sache wie Sie jetzt tun :)

+0

Danke, das sieht ziemlich umfassend aus. – Skurmedel

+0

Wenn Sie etwas anderes 3D in XNA basieren und mit Info-Links gepumpt werden möchten, fragen Sie einfach. Ich habe viel geforscht, bevor ich angefangen habe, und eine ziemlich gute Liste von Informationen für die fortgeschritteneren Sachen zusammengestellt. – Remm

+0

Hiya, Remm, ich mache 3D-basierte XNA-Sachen, und ich würde gerne mit Info-Links gepumpt werden! Hast du irgendwelche Vorschläge für mich? –