Registriert: Do Jun 09, 2005 13:48 Beiträge: 117 Wohnort: Sankt Augustin
Hallo,
ich möchte die Position, die Blickrichtung und den Upvector aus der aktuellen Matrix errechnen.
Soweit ich weiß ist die Position in den ersten drei Elementen der vierten Matrixspalte enthalten.
Wie komme ich aber jetzt an die Blickrichtung un den Upvector?
Erste Spalte(bzw. die ersten 3 Elemente davon): X- Achse
Zweite Spalte: Y-Achse
dritte Spalte: Z-Achse
vierte wie du schon richtig gesagt hattest die Position.
MfG
Flo
_________________ Danke an alle, die mir (und anderen) geholfen haben. So weit... ...so gut
Registriert: Do Jun 09, 2005 13:48 Beiträge: 117 Wohnort: Sankt Augustin
so weit, so gut...
mein Verständnis der Sache ist die, dass die einzelnen Spalten Vektoren darstellen. Mit einem
Vektor wird aber ein Punkt im Koordinatensystem beschrieben. Wie bekomme ich also aus einem
Punkt eine Drehung errechnet??? Und wie einen Upvector???
Registriert: Do Jun 19, 2003 10:44 Beiträge: 991 Wohnort: Karlsfeld (nahe München)
Also wenn ich den WIki Artikel richtig verschaden habe dann ist dies der Vektor (0,1,0) wenn die Projektions und Modelview matrix Identitätsmatrizen sind.
Die Frage nach dem Up-Vektor lautet also etwas anders formuliert, wie kann ich das einwirken der Modelview und Projektionsmatrix rückgängig machen. Du brauchst also eigentlich nur gluUnProject mit den richtigen Parametern aufrufen und du hast deinen Upvektor. Also die ersten 3 Parameter sind die Komponenten von (0,1,0), modelview, projection, viewport dürfte klar sein und das Ergebnis ist der gesuchte Upvektor für die übergebene Model und Projektionsmatrix.
Eventuel kürtzt sich durch die Nullen noch viel raus wenn du die Rechung per Hand und nicht per gluUnProject machst.
MfG
Flo
_________________ Danke an alle, die mir (und anderen) geholfen haben. So weit... ...so gut
Also wenn ich den WIki Artikel richtig verschaden habe dann ist dies der Vektor (0,1,0) wenn die Projektions und Modelview matrix Identitätsmatrizen sind.
Der Up Vektor müßte dann in der zweiten Spalte der Matrix stehen. Schließlich sind die Spaltenvektoren die Einheitsvektoren im neuen Koordinantensystem.
Zuletzt geändert von LarsMiddendorf am Mo Okt 10, 2005 16:20, insgesamt 1-mal geändert.
Registriert: Do Jun 09, 2005 13:48 Beiträge: 117 Wohnort: Sankt Augustin
zuerst einmal Dank an alle die versucht haben die Dunkelheit in meinem Programmiererhirn mit etwas Erleuchtung zu vertreiben!
Ich hatte irgendwie Tomaten auf den Augen. Es ist mir jetzt klar, dass die ersten drei Spaltzen die Ausrichtung der Ebenen (X/Y/Z) angeben. Ich brauche also immer nur zwei Informationen um die Ausrichtung meines aktuellen Koordinatensytems zu erhalten. Ist die Matrix
1,0,0,0
0,1,0,0
0,0,1,0
0,0,0,1
stimmt sie mit dem Basiskoordinatensystem überein. Ist sie
1,1,0,0
0,1,0,0
0,0,1,0
0,0,0,1
ist mein Koordinatensystem um 45° gedreht. In der Matrix stehen übrigens nicht die Einheitsvektoren sondern die "ungekürzten" Vektoren.
Das Problem was ich hatte war folgendes: Ich habe eine Kamera und kann auch schön um alle drei Achsen drehen und die kamera in jede beliebige Richtung verschieben. Auch die Blickrichtung kann ich beliebig verändern. mein Problem war, dass ich den drehpunkt nicht ändern kann. der liegt immer im 0-Punkt des Basis Koordinatensystems. Ich sitze jetzt schon bald zwei Monate an diesem Problem und werde bald verrückt.
Den UpVector brauchte ich um bei einer Positionsänderung die Lage nicht ändern zu müssen.
Ich habe mal ein paar Kameramodule angefügt. Benötigte Definitionen findet man im ersten Modul als Kommentar.
Registriert: Do Jun 19, 2003 10:44 Beiträge: 991 Wohnort: Karlsfeld (nahe München)
Wenn ich den Code da sehe muss ich erlich sagen du machst es dir viel zu schwer.
Wieso veränderst du die Kamara Matrix nicht einfach so:
* aktuelle Modellviewmatrix speichern
* Kamara Matrix laden
* glTranslate,glScalef oder auch glRoatef ausführen
* Kamara Matrix in der Variable abspeichern
* Modelviewmatrix von vorher wieder herstellen
die Position der Kamara erhälst du dann wie gesagt durch die vierte Spalte der Matrix. Die Koordiantenachsen !! nicht ebenen sind die Spalten der Martrix.
Registriert: Do Jun 09, 2005 13:48 Beiträge: 117 Wohnort: Sankt Augustin
ich dachte, dass ich genau das mache. wenn man sich die prozeduren RotateRoundAxis und Offset ansieht, dann wird doch genau das durchgeführt. wenn ich dann ein Apply mache und die so errechnete Matrix einsetze, dann ändert sich leider mein Rotationspunkt nicht.
Wieso machst du das hier nicht so wie in RotateRoundAxis? Dann schleichen sich auch keine Fehler ein. Denn es macht sehrwohl einen unterschied ob man erst rotiert und dann verschiebt oder erst verschiebt und dann rotiert.
Registriert: Do Jun 09, 2005 13:48 Beiträge: 117 Wohnort: Sankt Augustin
ich denke schon, dass ich das mit der reihenfolge usw. richtig verstanden habe. In einem hast Du aber recht: ich werde mal versuchen die Matritzenmultiplikation von OpenGL durchführen zu lassen.
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.