Object rotieren und die dazugehörigen achsen rotieren?
Hey, ich programmiere gerade an einem 3d Viewport und bin auf ein Problem gestoßen, als ich versucht habe Objekt zu rotieren. Beim Rotieren(oder zumindest so wie ich das implementiert habe) wird erst über die x, die y und dann die z-Achse gedreht, das Problem dabei ist, dass dann so zu sagen die Rotation über die x-Achse bei y und z noch mal mitgedreht wird und so für eine Rotation an der x Ache nicht zu einer über die globale x-Achse, sondern eher über eine lokale Achse des Objekts führt. Tatsächlich ist das auch das, was ich am Ende gern hätte, aber halt nicht nur an einer Achse. Was ich also suche, ist eine Möglichkeit einen Punkt im dreidimensionalen so zu rotieren, dass er zum Rotieren entweder nur lokale Achsen benutzt oder nur globale aber halt nicht irgendeine Mischung aus beidem. Hier ist noch der code den ich bis jetzt geschrieben habe:
point.yz = vec2(point.y * cos(rotation.x) - point.z * sin(rotation.x), point.y * sin(rotation.x) + point.z * cos(rotation.x));
point.xz = vec2(point.x * cos(rotation.y) - point.z * sin(rotation.y), point.x * sin(rotation.y) + point.z * cos(rotation.y));
point.xy = vec2(point.x * cos(rotation.z) - point.y * sin(rotation.z), point.x * sin(rotation.z) + point.y * cos(rotation.z));
1 Antwort
Lies dich mal zu Rotationsmatrizen und Quaternions ein. Mit Euler-Winkeln wird das schwer zu realisieren.
https://de.wikipedia.org/wiki/Drehmatrix
https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation
Wenn du doch Euler-Winkel verwenden möchtest könnte folgendes hilfreich sein:
https://de.wikipedia.org/wiki/Eulersche_Winkel#Beschreibung_durch_intrinsische_Drehungen
Danke für die antwort, jetzt wo du es sagst glaube ich ich habe sogar schon mal eine implementation von dem was ich vor habe gesehen und da stand auch was von Quaternions drin, ich werde das mal durchlesen und bin danach hoffentlich schlauer als vorher.