rotationsmatrix aus richtungsvektoen erstellen
-
hallo,
ich versuche ein programm zu erstellen, mit dem man ein raumjäger durch den weltraum fliegt.
habe aber probleme bei der rotation(rendern) der objekte.z.zt besitz jedes objekt(z.b. raumschiff):
*positionsvektor (welt-koord.)
-"VerschiebungsMatrix"
*richtungsvektoren nach vorne, oben und rechtsich habe aber probleme anhand dieser richtungsvektoren die objekte korrekt auszurichten(rotation).
die kamera-bewegung funktioniertz mittlerweile, aber mit gluLookat und das benötigt nur diese positions+richtungsvektoren.wie kann ich mit diesen 3 richtungsvektoren eine (oder 3) rotationsmatrizen erstellen?
-
In DirectX (also linkshändiges Koordinatensystem) besteht die Matrix aus:
(rechts.x rechts.y rechts.z 0)
(oben.x oben.y oben.z 0)
(vorne.x vorne.y vorne.z 0)
(position.x position.y position.z 1)Ich weiss nicht, wie das in OpenGL ist. Es kann sein, dass du die Vektoren nicht in eine Reihe sondern in eine Spalte schreiben musst. Also:
(rechts.x oben.x vorne.x position.x)
(rechts.y oben.y vorne.y position.y)
(rechts.z oben.z vorne.z position.z)
(0 0 0 1 )Wenn du nur eine Rotationsmatrix haben willst, musst du position durch (0,0,0) erstezen.
Gruss
Gameco
-
hab mich wohl ungenau ausgedrückt.
also ich suche einen weg, wie ich eine rotationsmatrix aus 3 richtungsvektoren(front, top, right => eine Achse, die die Kamera-Ausrichtung (rollen, drehen, neigen) angibt) estelle.
ich bewege die kamera z.zt (rotation) indem ich die 3 richtungsvektoren(achse) ständig rotiere. diese richtungsvektoren kann ich direkt für gluLookat nutzen. funktioniert alles einwandfrei.
würde ich nur
aber ich möchte auch die objekte korrekt mittelt glMultMatrix() rotieren. dafür benötige ich die rotationsmatrix.
hab bis jetzt nur rotationsmatrizen gesehen, die winkel winkelwerte erwarten, aber ich habe ja nur die Vektoren.ich versuche schon die ganze zeit anhand der 3 vektoren die winkel zu errechnen (pythagoras) und damit eine rotationsmatrix zu erstellen. aber das funktioniert auch nicht: sobald ich das objekt um mehr als eine achse drehe, "dreht" sich dieses weg.
-
hat jemand vielleicht eine andere idee, wie man die bewegung des raumschiffs umsetzen kann?
3 float's für die Rotation der x,y,z-achse (statt den richtungsvektoren) würde wieder mehr Probleme bereiten, da die winkel der rotationen (x,y,z) anhand der "achsenausrichtung" berechtent werden müssen (das war mein erster Versuch).Jemand noch einen netten Tip für mich?
-
falls du wirklich 3 vektoren hast ist das beispiel oben das richtige. falls du jedoch meinst du hast 3 winkel, dann das
-
super, vielen dank euch.
ich depp dachte die frage wäre falsch verstanden, weil die lösung doch zu simpel aussah: einfach die werte eintragen. dachte ich muss noch wild rumrechnen.grüsse