2016-12-27 6 views
1

Angenommen wir einen Punkt p(1, 2, 3, w=1) mit einem Vektor v(a, b, c, w=0) zu einem neuen Punkt p'verstehen Translation Matrix in OpenGL

Hinweis übersetzen: w=0 einen Vektor darstellt und w=1 stellen einen Punkt in OpenGL, bitte korrigieren Sie mich, wenn ich falsch.

In Affine Transformation Definition, die wir haben:

p + v = p' 

=> p(1, 2, 3, 1) + v(a, b, c, 0) = p(1 + a, 2 + b, 3 + c, 1) 

=> point + vector = point (everything works as expected) 

In OpenGL, die Übersetzung Matrix ist wie folgt:

1 0 0 a 
0 1 0 b 
0 0 1 c 
0 0 0 1 

Ich gehe davon aus (a, b, c, 1) ist der Vektor von Affine Transformation Definition warum wir haben w=1, aber nicht w=0 wie

1 0 0 a 
0 1 0 b 
0 0 1 c 
0 0 0 0 
+0

Ein Punkt multipliziert mit einer Transformationsmatrix sollte Ihnen einen Punkt geben, richtig? – beaker

Antwort

2

Hinweis: w=0 einen Vektor und w=1 stellen einen Punkt in OpenGL, mich bitte korrigieren, wenn ich falsch bin.

Sie liegen falsch. Mit OpenGL hat das zunächst gar nichts zu tun.Dies ist etwa homogenous coordinates, was ein rein mathematisches Konzept ist. Es arbeitet, indem es einen n-dimensionalen Vektorraum in einen n + 1 dimensionalen Vektorraum einbettet. Im 3D-Fall verwenden wir 4D homogene Koordinaten, mit der Definition, dass der homogene Vektor (x, y, z, w) den 3D-Punkt (x/w, y/w, z/w) in kartesischen Koordinaten darstellt.

Als Ergebnis für jeden w != 0, Sie einen bestimmten endlichen Punkt, und für w = 0 sind hermeneutische Sie einen unendlich Punkt weit weg in eine bestimmte Richtung. Dies bedeutet, dass die homogenen Koordinaten in der Hinsicht leistungsfähiger sind, dass sie tatsächlich unendlich weit entfernte Punkte mit endlichen Koordinaten beschreiben können (was für perspektivische Transformationen sehr nützlich ist, wo unendlich weit entfernte Punkte auf endliche Punkte abgebildet werden und umgekehrt)).

Sie können sich als Abkürzung (x,y,z,0) als Richtungsvektor vorstellen. Aber für einen Punkt, es ist nicht nur , w Wert ungleich 0. Konzeptionell bedeutet dies, dass jeder kartesischen 3D-Punkt durch eine Linie im homogenen Raum dargestellt wird (wir gingen eine Dimension hinauf, so dass dies tatsächlich macht Sinn).

Ich nehme an (a, b, c, 1) ist der Vektor von Affine Transformation Definition, warum wir w = 1 haben, aber nicht w = 0?

Ihre Annahme ist falsch. Eine Sache über homogene Koordinaten ist, dass wir keine Übersetzung im 4D-Raum anwenden. Wir erhalten den Effekt der Übersetzung im 3D Raum, indem wir tatsächlich eine Scheroperation im 4D Raum durchführen.

Also, was wir wirklich in homogenen Raum tun möchten, ist

(x + w *a, y + w*b, z+ w*c, w) 

da die 3D-Interpretation des resultierenden Vektors dann

(x + w*a)/w == x/w + a 
(y + w*b)/w == y/w + b 
(z + w*c)/w == z/w + c 

sein wird, die die Übersetzung darstellen, die wir nach waren.

So zu versuchen, dies noch deutlicher zu machen:

Was Sie in Ihrer Frage schrieb:

p(1, 2, 3, 1) + v(a, b, c, 0) = p(1 + a, 2 + b, 3 + c, 1) 

Ist hiermit ausdrücklich nicht, was wir tun wollen. Was Sie beschreiben, ist eine affine Übersetzung in Bezug auf den 4D-Vektorraum.

Aber was wir eigentlich wollen eine Übersetzung in den 3D-kartesischen Koordinaten, so

(1, 2, 3) + (a, b, c) = (1 + a, 2 + b, 3 + c) 

Ihre Formel anwenden tatsächlich eine Übersetzung in dem homogenen Raum tun würde bedeuten, was die Wirkung des Tuns eine Übersetzung hätte die wird durch die w Koordinate skaliert, während die Formel I gab den Punkt immer um (a,b,c), egal was w wir für den Punkt gewählt haben.

Dies ist natürlich nicht wahr, wenn wir w=0 wählen.Dann werden wir überhaupt keine Änderung erhalten, was auch richtig ist, weil eine Übersetzung niemals die Richtung ändern wird - Ihre Formel würde die Richtung ändern. Ihre Formel ist nur für w=1 korrekt, was nur ein Spezialfall ist. Aber der entscheidende Punkt ist, dass wir schließlich keine Vektoraddition durchführen, sondern eine Matrix * Vektormultiplikation. Und homogene Koordinaten erlauben es uns (neben anderen, mächtigeren Dingen), eine Übersetzung durch Matrixmultiplikation darzustellen. Aber das bedeutet nicht, dass wir die letzte Spalte einfach als einen Übersetzungsvektor interpretieren können, als ob wir eine Vektoraddition durchführen würden.

1

Einfache Antwort

Der Grund ist die Art, wie Matrixmultiplikationen arbeiten. Wenn Sie eine Matrix mit einem Vektor multiplizieren, dann ist die w-Komponente des Ergebnisses das innere Produkt der 4. Zeile der Matrix mit dem Vektor. Nach dem Anwenden der Transformation sollte ein Punkt immer noch ein Punkt sein und eine Richtung sollte eine Richtung sein. Wenn Sie dies auf einen 0-Vektor setzen würden, wäre das Ergebnis immer 0 und der resultierende Vektor wird sich von Position (w = 1) in Richtung (w = 0) geändert haben.

Detailliertere Antwort

Die Definition einer affinen Transformation ist:

x' = A * x + t, 

wo ein A eine lineare Abbildung ist und eine Übersetzung t. Traditionell werden lineare Karten von Mathematikern in Matrixform geschrieben. Beachten Sie, dass t hier, ähnlich wie x, ein 3-dimensionaler Vektor ist. Es wäre jetzt umständlich (und weniger allgemein, wenn man an projektive Abbildungen denkt), wenn wir immer mit der linearen Mapping-Matrix und dem Übersetzungsvektor umgehen müssten. Dies kann gelöst werden, indem eine zusätzliche Dimension in die Abbildung eingeführt wird, die sogenannte homogene Koordinate, die es ermöglicht, die lineare Abbildung sowie den Translationsvektor in einer kombinierten 4x4-Matrix zu speichern. Dies wird erweiterte Matrix und durch Definition genannt,

x'  A | t  x 
[ ] = [ | ] * [ ] 
    1  0 | 1  1 

Es sollte auch darauf hingewiesen werden, dass affinen Transformationen können nun sehr leicht kombiniert werden, indem man nur dort vermehrt Matrizen multiplizieren, die hart sein würden, in Matrix und Vektor-Notation zu tun.

Man sollte auch beachten, dass die untere rechte 1 nicht Teil des Translationsvektors ist, der immer noch 3-dimensional ist, sondern der Matrixvergrößerung.

Vielleicht wollen Sie auch den Abschnitt über „Augmented Matrix“ hier lesen: https://en.wikipedia.org/wiki/Affine_transformation#Augmented_matrix