2009-08-16 13 views
4

In HLSL gibt es eine Menge Matrix Multiplikation und während ich verstehe, wie und wo sie zu verwenden Ich bin mir nicht sicher, wie sie abgeleitet sind oder was ihre eigentlichen Ziele sind.Matrix Multiplikation - Ansicht/Projektion, Welt/Projektion, etc.

Also fragte ich mich, ob es online eine Ressource gibt, die das erklärt. Ich bin besonders neugierig darauf, was der Zweck ist, eine Weltmatrix mit einer Ansichtsmatrix und einer Welt + Blickmatrix durch eine Projektionsmatrix zu multiplizieren.

Antwort

12

Sie können einige Informationen mathematisch unter this wikipedia article oder msdn abrufen.

Im Wesentlichen, wenn Sie ein 3D-Modell auf dem Bildschirm rendern, beginnen Sie mit einer einfachen Sammlung von Vertices im 3D-Raum verstreut. Diese Scheitelpunkte haben alle ihre eigenen Positionen, ausgedrückt in "Objektraum". Das heißt, sie haben normalerweise Koordinaten, die in der Szene, die gerendert wird, keine Bedeutung haben, sondern nur die Beziehungen zwischen einer Ecke und der anderen des gleichen Modells ausdrücken. Zum Beispiel können die Positionen der Scheitelpunkte eines Modells nur zwischen -1 und 1 liegen (oder ähnlich, es hängt davon ab, wie das Modell erstellt wurde).

Um das Modell in die richtige Position zu bringen, müssen Sie es skalieren, drehen und in die "echte" Position in Ihrer Szene übersetzen. Diese Position, an die Sie sich bewegen, wird in "world space" Koordinaten ausgedrückt, die auch die realen Beziehungen zwischen den Scheitelpunkten in Ihrer Szene ausdrücken. Um dies zu tun, multiplizieren Sie einfach die Position jedes Stützpunktes mit seiner World Matrix. Diese Matrix muss erstellt werden, um die Parameter für die Translation/Drehung/Skalierung zu enthalten, die Sie anwenden müssen, damit das Objekt an der richtigen Position in der Szene angezeigt wird.

An dieser Stelle (nach allen Ecken aller Ihren Modelle mit einer Welt Matrix multipliziert) Ihre Eckpunkte in Weltkoordinaten ausgedrückt werden, aber man kann sich richtig noch nicht machen, weil ihre Position nicht in Bezug auf Ihre „Ansicht“ ist (dh deine Kamera). Also, dieses Mal multipliziert man alles mit einer View-Matrix, die die Position und Orientierung des Ansichtspunkts widerspiegelt, von dem aus man die Szene rendert.

Alle Scheitelpunkte sind jetzt in der richtigen Position, aber um perspective zu simulieren, müssen Sie noch alles mit einer Projektionsmatrix multiplizieren. Diese letzte Multiplikation bestimmt, wie sich die Position der Scheitelpunkte basierend auf der Entfernung von der Kamera ändert.

Und jetzt endlich alle Vertices, beginnend von ihrer Position in "Objektraum", wurden an die endgültige Position auf dem Bildschirm bewegt, wo sie gerendert, gerastert und dann präsentiert werden.