OpenGL - Rotation um 2 Achsen
-
Hallo zusammen,
ich habe ein Problem mit der Rotation von Objekten in OpenGL, habe mich hier auch schon umgeguckt und den Beitrag Objekt rotieren lassen gefunden, aber ich glaube, dass mein Problem damit noch nicht gelöst ist.
Ich möchte erreichen, dass ein sich um die y-Achse drehendes Objekt sich gleichzeitig um die x-Achse dreht. Die Ergebnisse sahen bisher so aus, dass das Objekt um die Diagonale (also Winkelhalbierende zwischen x- und y-Achse) gedreht wurde, oder eben nur um eine der Achsen, je nachdem ich die Translate und Rotate Funktionen kombiniert habe.
Ist meine Vorstellung der Drehung ein Denkfehler und somit nicht möglich? Wenn es möglich ist, wie genau?
Sollte mein Ziel unverständlich ausgedrückt sein, werde ich versuchen, es genauer zu beschreiben.Danke schon mal im voraus
-
Hier findest du eine sehr gute erklärung wie das prinzipiell funktioniert. Das Beispiel ist in DirectX aber vielleicht hilft es dir trotzdem weiter zu verstehen was du machen musst.
-
Du musst immer daran denken das du das Koordinatensystem drehst und nicht... wie soll ich sagen... "das Objekt". Also wenn du eine Achse drehst wirkt sich das auf die anderen Achsen aus, da die vorherige Rotation die Lage dieser Achsen mit beeinflusst.
-
Ja genau, das war mir bekannt und das war auch mein Problem... ich hab nämlich versucht, um die eine Achse zu drehen und dann wieder zurück, damit ich um die andere Achse richtig rotieren konnte... und genau dabei kamen die komischen Ergebnisse raus. Mussten ja auch, denn wenn man direkt wieder zurückdreht, tut sich um diese Achse im Endeffekt nichts. Und beide gleichzeitig führten eben zu dieser Drehung um die Diagonale, auch verständlich.
So gesehen ist nicht direkt das Verständnis das Problem, sondern die richtige Anwendung.
Aber die Erklärung in dem Tutorial ist wirklich sehr gut, dafür danke schon mal.
Also so, wie ich das verstanden habe, geht das gleichzeitige Rotieren um mehrere Achsen dann nur mit Matrizen? Sehe ich das richtig?Dann werde ich mir mal in OpenGL die passenden Funktionen raussuchen. Ich hoffe nur, dass das Ergebnis wirklich das gewünschte ist und nicht schon wieder eine Rotation um die Winkelhalbierende o.ä. Erstmal experimentieren
Danke für eure Geduld, ich bin echt froh das Forum gefunden zu haben
-
Heyho,
ich hab endlich den Effekt erzielen können, den ich mir gewünscht hab. Ich hab's jetzt mit glRotatef gemacht, weil ich sonst keine passendere Funktion gefunden habe. Falls es euch interessiert, hier ist der relevante Code-Ausschnitt aus der Funktion zum Zeichnen:
glLoadIdentity (); glTranslatef (0.0f, 0.0f, -9.0f); // nur zum Rauszoomen glRotatef (yRot, 0.0f, 1.0f, 0.0f); glRotatef (-xRot, cos (yRot / 180 * PI), 0.0f, sin (yRot / 180 * PI));
Die Lösung war natürlich nicht alles wieder zurückzudrehen, sondern den Vektor zu berechnen, der immer an der Stelle der ursprünglichen x-Achse liegt.
Vorschläge, wie man es besser oder eleganter machen kann, nehme ich natürlich dankend entgegen.
-
Schau auch mal nach Quaternionen, die sind auch ganz nett.
MfG Kimmi
-
Hey, nicht schlecht, danke!
Wikipedia schrieb:
Bei Verwendung von Quaternionen an Stelle von Drehmatrizen werden etwas weniger Rechenoperationen benötigt. Insbesondere, wenn viele Drehungen miteinander kombiniert (multipliziert) werden, steigt die Verarbeitungsgeschwindigkeit. Des Weiteren werden Quaternionen, neben den Eulerwinkeln, zur Programmierung von Industrierobotern (z. B. ABB) genutzt.
Das scheint echt die elegantere Lösung zu sein