Punkt um lokales Koordinatensystem rotieren



  • Hi,

    Ich bin gerade dabei mit OpenGL ne kleine Grafikengine zu schreiben,
    doch jetzt bin ich auf ein Problem gestoßen.

    Wie rotiert man einen Punkt um ein lokales Koordinatensystem?

    Um das Globale funktioniert es ja folgendermaßen:

    Man multipliziert den Punkt mit einer RotationsMatrix.
    Ich benutze 4*4 Matrizen.

    Diese sehen folgendermaßen aus:
    Für Z-Rotationen

    cos(ß)  -sin(ß)  0.0  0.0  
    sin(ß)  cos(ß)   0.0  0.0  
    0.0     0.0     1.0   0.0  
    0.0     0.0     0.0   1.0
    

    Für X-Rotationen

    1.0  0.0      0.0     0.0  
    0.0  cos(ß)  -sin(ß)  0.0  
    0.0  sin(ß)  cos(ß)   0.0  
    0.0  0.0     0.0     1.0
    

    Für Y-Rotaionen

    cos(ß)  0.0  sin(ß)  0.0  
    0.0     1.0  0.0     0.0  
    -sin(ß) 0.0  cos(ß)  0.0  
    0.0     0.0  0.0     1.0
    

    Diese Matrizen zu erarbeiten ging ja und war für mich auch logisch nachzuvollziehen, wenn man mit dem Einheitskreis arbeitet.
    Bidde bedenkt,dass ich erst in der 10ten Klasse bin und mir Matrizen und Vectoren selbst beibringen musste, also wenn ich irgendwo Grundlegende Fehler habe net böse sein.

    Aber zurück zum eigentlichen Problem.
    Ich selbst habe mir auch dadrüber ein paar Gedanken gemacht unb bin zum Entschluss gekommen, dass ich das lokale Koordinatensystem warscheinlich auch in einer Matrix speichern muss, und die dann mit einer Rotationsmatrux multipliziere.

    Dieser Ansatz hat sich auch bestätigt, was folgender Link zeigt.
    http://www.zfx.info/DisplayThread.php?MID=29077#29077

    Dieses funktioniert bei mir aber irgendwie nicht wie gewünscht.
    Bei Rotationen bis 90 Grad oder ein Bogenmaß von 1/2 PI
    geht es noch, aber ab dann bekomme ich komische Werte zurück und
    es rotiert nicht mehr wie gewünscht.

    Aber ich denke, da dort keiner solche Fehler gemeldet hat, muss es wohl doch richt sein.

    Könnte mir btte einer nochmal erklären, wie genau man einen Punkt um ein lokales Koordinatensystem rotiert.(sodass ich es auch nachvollzioehen kann, Copy & Past bringt nich wirklich viel)

    Vielen Dank schonmal im Vorraus

    mfg



  • Eine Rotation um eine beliebige Achse v kannst du durch eine Komposition von Transformationen um die globalen Achsen beschreiben. In Worten:
    Du verschiebst die Rotationsachse (die ja auch die Achsen deines "lokalen Systems" sein können) in den Mittelpunkt deines Weltkoordinatensystem, rotierst dann v um die globale x-Achse in die xz-Ebene und anschließend um die y-Achse, so dass v mit der globalen z-Achse übereinstimmt. Anschließend führst du über die z-Rotationsmatrix die eigentliche Rotation durch. Danach musst du nur noch durch die inversen Transformationen die Transformierten Koordinaten zurücktransformieren. Genauer ist das hier beschrieben:
    http://www-lehre.inf.uos.de/~cg/1997/skript/13_3_1_Rotation_um.html



  • In das lokale Koordinatensystem umrechnen. Rotieren. In das globale Koordiantensystem umrechnen.

    Übrigens rotiert man nicht um Koordinatensystem, sondern umd Achsen. z.b. die x,y und z Achse des Koordinatensystems.

    Bye, TGGC (Das Jahr des Helden)


Anmelden zum Antworten