Allgemeine Einführung: Koordinatentransformation von 3D-Modellen
Substanz
Zuallererst
Sie sehen vielleicht oft 3D-Bilder auf Fernsehbildschirmen und Displays in Spielen, aber wie zeigt man Objekte, die im 3D-Raum existieren, wie z. B. Charaktere und Gebäude, die sich auf dem Bildschirm bewegen, auf einem 2D-Bildschirm an?
In 2D-Spielen gibt es nur zweidimensionale Elemente von "X und Y" als Koordinatenwerte, und die Anzeige ist auch 2D, wenn Sie also ein Objekt zeichnen, indem Sie die Koordinatenposition von X und Y angeben, werden Sie intuitiv verstehen, wie es an welcher Position gezeichnet wird.
In 3D ist das jedoch nicht so einfach. Wie der Name schon sagt, ist 3D "3 Dimensionen" und verfügt über drei Koordinateninformationen: "X, Y und Z". Da sich die Koordinaten von der Darstellung in 2D unterscheiden, ist es nicht möglich, das Objekt so zu zeichnen, wie es ist.
Was dann zu tun ist, ist, "dreidimensionale Informationen in zweidimensionale Informationen umzuwandeln". Dies wird allgemein als "Koordinatentransformation" bezeichnet. Denken Sie daran, dass diese Koordinatentransformation für die 3D-Programmierung unerlässlich ist.
Es gibt verschiedene Arten von Koordinatentransformationen zum Konvertieren von 3D in 2D, aber es gibt drei Haupttypen von Koordinatentransformationen, die Programmierer verarbeiten: "Welttransformation", "Ansichtstransformation" und "Projektionstransformation". Hier erklären wir Ihnen alles, was mit der Koordinationstransformation zu tun hat.
Links- und Rechtshänder-Koordinatensysteme
In 3D gibt es zwei Koordinatensysteme, das "linkshändige Koordinatensystem" und das "rechte Koordinatensystem", die für jede Koordinate unterschiedliche Ausrichtungen haben, wie in der Abbildung unten gezeigt.
Direct3D verwendet in erster Linie ein linkshändiges Koordinatensystem, aber es gibt auch Funktionen zum Berechnen für rechtshändige Koordinatensysteme. XNA stellt Berechnungsmethoden jedoch nur für rechtshändige Koordinatensysteme zur Verfügung. Dies scheint mit der Tatsache übereinzustimmen, dass andere Anwendungen häufig rechtshändige Koordinatensysteme verwenden.
Alle XNA-Tipps auf dieser Website verwenden das rechtshändige Koordinatensystem.
Lokales Koordinatensystem (Modellkoordinatensystem)
Jedes Modell verfügt über ein Koordinatensystem, das um den Ursprung zentriert ist. Wenn man ein Modell mit einer Modellierungssoftware erstellt, ist es meiner Meinung nach leichter zu verstehen, wenn man sich vorstellt, es mit dem Ursprung als Mittelpunkt zu erstellen.
Welt-Koordinatensystem
Das Weltkoordinatensystem ermöglicht es Ihnen, das Modell an einer beliebigen Stelle zu platzieren. Wenn Sie in dieser Welttransformation nichts tun, wird das Modell auf die gleiche Weise wie die lokalen Koordinaten am Ursprung platziert. Die Platzierung dient nicht nur dazu, sich vom Ursprung aus zu bewegen, sondern auch zu drehen und zu skalieren.
Koordinatensystem anzeigen
Nachdem Sie das Modell in Weltkoordinaten platziert haben, benötigen Sie Informationen darüber, wohin Sie schauen und wohin Sie im 3D-Raum blicken. Dies nennen wir "Ansichtstransformationen". Ansichtstransformationen werden im Allgemeinen häufig als Kameras dargestellt.
Die für diese Konvertierung erforderlichen Parameter sind "Kameraposition", "Kamerapunkt" und "Kamerarichtung nach oben". Die Ausrichtung der Kamera wird durch diese drei Parameter bestimmt. Die folgende Abbildung zeigt die Kamera aus der Perspektive eines Drittanbieters.
Die folgende Abbildung ist tatsächlich aus der Sicht der Kamera mit der Anordnung in der obigen Abbildung zu sehen (zu diesem Zeitpunkt haben wir die Koordinaten noch nicht auf den Bildschirm übertragen, es handelt sich also nur um ein Bild).
In der vorherigen Erklärung scheint es, dass die Kamera positioniert und die Koordinaten transformiert werden, aber in der eigentlichen Berechnung werden die Weltkoordinaten entsprechend der Position und Ausrichtung der Kamera umgerechnet. Daher ist der Ursprung die Position der Kamera, wie in der Abbildung unten gezeigt.
Projektives Koordinatensystem
Wenn Sie sich entschieden haben, von welcher Position aus Sie den 3D-Raum betrachten möchten, besteht der nächste Schritt darin, die Darstellung von "kleinen Objekten, die weit entfernt sind" und "großen Dingen, die in der Nähe sind" zu bearbeiten. Dies wird als projektive Transformation bezeichnet. Es gibt zwei Methoden der Projektionstransformation, "perspektivische Projektion" und "orthographische Projektion", aber das häufig verwendete Bild der "perspektivischen Projektion" ist wie folgt.
Für die perspektivische Projektion werden die folgenden Parameter verwendet: Betrachtungswinkel, Seitenverhältnis, Clip-Position nach vorne und Position des hinteren Clips. Der Bereich mit der Bezeichnung "Frustum" in der obigen Abbildung erscheint schließlich auf dem Bildschirm.
"Betrachtungswinkel" gibt den von der Kamera aus sichtbaren Betrachtungsbereich an. Durch Verringern des Winkels wird vergrößert, durch Vergrößern wird verkleinert. Der Betrachtungswinkel ist der vertikale Wert des Stumpfes.
Das Seitenverhältnis wird verwendet, um den horizontalen Blickwinkel zu bestimmen, während der Betrachtungswinkel ein vertikaler Winkel ist. Der horizontale Winkel wird normalerweise durch das "Betrachtungswinkel- × Seitenverhältnis" bestimmt, und das Seitenverhältnis ist im Grunde der Wert der "Breite ÷ Höhe" des Bildschirms, den Sie anzeigen möchten. Wenn Sie diesen Wert ändern, scheint sich das angezeigte 3D-Objekt horizontal oder vertikal zu strecken.
Mit der Option "Clip-Position vorne" und "Position des hinteren Clips" wird festgelegt, um zu bestimmen, ob das Objekt im vorderen oder hinteren Bereich angezeigt wird. Aufgrund der Beschaffenheit des Computers ist es nicht möglich, bis unendlich anzuzeigen, daher werden wir ein Limit festlegen. Dieser Wert wirkt sich auch auf die Genauigkeit des Z-Puffers aus, daher wird nicht empfohlen, ihn in den Zeichenbereich außerhalb des Bereichs aufzunehmen, der nicht angezeigt werden muss.
Das perspektivisch transformierte Objekt wird in einen Raum wie den folgenden umgewandelt. Objekte, die sich in der Nähe der Kamera befanden, werden vergrößert, und Objekte, die weit entfernt waren, werden verkleinert.
Dies wird in einem leicht verständlichen Diagramm unten veranschaulicht.
Wenn man es tatsächlich aus der Sicht der Kamera betrachtet, sieht es unten so aus.
Eine weitere Methode der projektiven Transformation ist die orthogonale Projektion, bei der ein sichtbarer Bereich wie der folgende projiziert wird. Da Breite und Höhe unabhängig von der Tiefe konstant sind, ändert sich die Größe des Objekts nicht mit der Tiefe.
Bildschirm-Koordinatensystem
Nach der Projektionstransformation wird sie in die Koordinaten der tatsächlichen Leinwand konvertiert. Obwohl es sich um einen Bildschirm handelt, ändern sich die Position und der Bereich des Bildschirms je nach den auf dem Gerät festgelegten Viewport-Einstellungen. Im Falle von Spielen sind die Client-Koordinaten des Fensters jedoch oft das Ansichtsfenster, so wie es ist, daher denke ich, dass Sie sich keine allzu großen Sorgen machen müssen.
Die Koordinaten der Leinwand (0, 0) werden aus den Projektionskoordinaten (-1, 1, z) umgerechnet. Analog dazu werden die Leinwandkoordinaten (Breite, Höhe) aus den Projektionskoordinaten (1, -1 ,z) umgerechnet.