Frage

Ich fange an, über 3D-Rendering zu lernen, und ich habe gute Fortschritte gemacht. Ich habe eine Menge in Bezug auf Matrizen und den allgemeinen Betrieb aufgenommen, die auf sie ausgeführt werden kann.

Eine Sache, die ich immer noch nicht ganz bin finden Verwendung OpenGL von Matrizen. Ich sehe dies (und Dinge wie es) ziemlich viel:

x y z n
-------
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

So mein bestes Verständnis ist, dass es eine normalisierte ist (kein Betrag) 4 dimensional, säulen große Matrix. Auch, dass diese Matrix insbesondere die „Identitätsmatrix“ genannt.

Einige Fragen:

  • Was ist die "n-te" Dimension?
  • Wie und wann werden diese angewendet?

Meine größte Verwirrung ergibt sich aus, wie OpenGL Verwendung dieser Art von Daten macht.

War es hilfreich?

Lösung

Die kurze Antwort, die Ihnen helfen loszulegen ist, dass die ‚n-te‘ Dimension, wie Sie es nennen, stellt keine visualisierbar Menge. Es wird als ein praktisches Werkzeug hinzugefügt Matrix-Multiplikationen, dass Ursache Übersetzung und perspektivische Projektion zu ermöglichen. Eine intuitive 3x3-Matrix kann diese Dinge nicht tun.

Ein 3D-Wert einen Punkt im Raum darstellt, immer 1 wird als der vierte Wert angehängt, um diesen Trick funktioniert. Ein 3D-Wert, der eine Richtung darstellt (d.h. eine normale, wenn Sie mit diesem Begriff vertraut sind) bekommt 0 in der vierten Stelle angehängt.

Andere Tipps

In den meisten 3D-Grafiken wird ein Punkt durch ein 4-Komponenten-Vektor (x, y, z, w) dargestellt wird, wobei w = 1. Übliche Operationen an einem Punkt angelegt umfassen Translation, Skalierung, Rotation, Reflexion, Schrägstellung und die Kombination von diesen.

Diese Transformationen können durch ein mathematisches Objekt dargestellt werden als „Matrix“. Eine Matrix gilt auf einem Vektor wie folgt aus:

[ a b c tx ] [ x ]   [ a*x + b*y + c*z + tx*w ]
| d e f ty | | y | = | d*x + e*y + f*z + ty*w |
| g h i tz | | z |   | g*x + h*y + i*z + tz*w |
[ p q r s  ] [ w ]   [ p*x + q*y + r*z +  s*w ]

Zum Beispiel Skalierung wird dargestellt als

[ 2 . . . ] [ x ]   [ 2x ]
| . 2 . . | | y | = | 2y |
| . . 2 . | | z |   | 2z |
[ . . . 1 ] [ 1 ]   [ 1  ]

und Übersetzung als

[ 1 . . dx ] [ x ]   [ x + dx ]
| . 1 . dy | | y | = | y + dy |
| . . 1 dz | | z |   | z + dz |
[ . . . 1  ] [ 1 ]   [   1    ]

Einer der Gründe für die vierte Komponente ist eine Übersetzung darstellbaren durch eine Matrix zu machen.

Der Vorteil der Verwendung einer Matrix besteht darin, dass mehrere Transformationen in eine über Matrixmultiplikation kombiniert werden können.

Nun, wenn der Zweck einfach ist die Übersetzung auf dem Tisch zu bringen, dann würde ich sagen, (x, y, z, 1) anstelle von (x, y, z, w) und die letzten Zeile der Matrix machen immer [0 0 0 1], wie er üblicherweise für 2D-Grafik getan. In der Tat wird der 4-Komponentenvektor wieder in dem normalen 3-Vektor Vektor über diese Formel zugeordnet werden:

[ x(3D) ]   [ x / w ]
| y(3D) ] = | y / w |
[ z(3D) ]   [ z / w ]

Das heißt homogenen Koordinaten . Zulassen dies macht die perspektivische Projektion ausdrückbar mit einer Matrix zu, , die wiederum mit allen anderen Transformationen kombinieren können.

Da zum Beispiel Objekte, die weiter entfernt ist, kleiner auf dem Bildschirm sein sollen, können wir die 3D-Koordinaten in 2D-Transformation Formel mit

x(2D) = x(3D) / (10 * z(3D))
y(2D) = y(3D) / (10 * z(3D))

Wenn wir jetzt gelten die Projektionsmatrix

[ 1 . .  . ] [ x ]   [  x   ]
| . 1 .  . | | y | = |  y   |
| . . 1  . | | z |   |  z   |
[ . . 10 . ] [ 1 ]   [ 10*z ]

dann die realen 3D-Koordinaten werden würde

x(3D) := x/w = x/10z
y(3D) := y/w = y/10z
z(3D) := z/w = 0.1

so dass wir nur die z-Koordinate, um Projekt zu 2D müssen hacken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top