Wie berechnet man die View-Matrix?
-
Ich habe 3 Punkte in Weltkoordinaten.
p : Position der Kamera
d : auf diesen Punkt ist die Kamera gerichtet
u : Position über der KameraWie berechne ich daraus jetzt die View-Matrix?
Auf dem Papier würde ich das wohl so machen:
b3' := p-d
b3 := b3' * (1/|b3'|)
b1' := (u-p) x b3
b1 := b1' * (1/|b1'|)
b2' := b3 x b1
b2 := b2' * (1/|b2'|)R^(-1) := (b1 b2 b3)
Berechnung von R mit Graußverfahrendie View Matrix müsste dann so aussehen:
(R -p)
(0 1 )Ist das so richtig? Gibt es vielleicht eine bessere Methode?
-
Du bist schon am richtigen Weg. Allerdings willst du nicht nur die Inverse des Rotationsanteils, sondern die Inverse des ganzen Dings. Gaußverfahren kannst du dir aber sparen, da es sich um einen Spezialfall handelt, der sehr leicht zu invertieren ist. Da R orthogonal ist, ist die Inverse von R einfach die Transponierte und statt dem Vektor p nimmst du den Vektor mit den negativen Skalarprodukten von p und der jeweiligen Achse von R als Koordinaten für den Translationsanteil (-<p, b1>, -<p, b2>, -<p, b3>). b2 zu normalisieren kannst du dir übrigens sparen, da b1 und b3 schon normalisiert sind.
-
Danke für die Antwort.
Ich wollte eigentlich schon das Inverse des ganzen Dings nehmen. Aber ich hatte (A*B)^(-1) = A^(-1) * B^(-1) gerechnet, was natürlich falsch ist. B^(-1) * A^(-1) wäre richtig gewesen. Dass das Inverse von orthogonalen Matritzen gleich dem Transponierten ist, macht die Sache natürlich einfacher. Das hätte ich wissen können. Aber meine LA Vorlesungen sind schon so lange her