ich probiere jetzt seit 3 Tagen eine Rotation auf meinen Körper hinzubekommen.
Das klappt solange ich nur um 2 Achsen rotieren möchte.
Nun wollte ich, wie es in CAD-Tools üblich ist rotieren lassen, aber ich bekomme das einfach nicht hin.
Was ich tue ist folgendes.
Ich zeichne meinen Körper (es ist immer nur einer) in der Mitte des Weltkoordinatensystems und möchte dann so rotieren, wenn eine Achse auf mich zeigt er um die anderen beiden rotiert.
Also:
wenn x auf mich zeigt um y und z.
wenn y auf mich zeigt um x und z
und wenn z auch mich zeigt um x und y.
Und alle zwischenstufen natürlich.
Ich habe schon erkannt, das das mit den glRotatef-Funktionen nicht klappt, da er die Koordinatensystem mitrotiert.
Was ich nicht hinbekomme ist, wie ich in abhängigkeit der beiden Mausparameter x und y eine Rotationsmatrix aufbauen kann, mit der ich die Rotation per glMultMatrix selbst vornehmen kann.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich bin mir nicht sicher, ob das was du beschreibst nicht einfacher ist als du denkst.
Wenn die Z-Achse auf dich zeigt, und das Objekt sich in der X-Y-Ebene drehen soll, heißt dass, das sich das Objekt um die Z-Achse drehen muss.
Das ist das erste.
Um zu verhindern, dass sich das Koordinatensystem mitdreht, musst du vor dem Rotieren glPushMatrix aufrufen, und nachdem du das Objekt gezeichnet hast wieder glPopMatrix.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Das globale Koordinatensystem lasse ich fest stehen. Rotiere also nur noch das Objekt.
Mein Problem ist die Dynamik.
Sprich:
Wenn die lokale z-Achse auf mich zeigt, soll er um globale x-y-Drehen.
Wenn die lokale y-Achse auf mich zeigt, soll er um global x-z-Drehen.
Wenn die lokale x-Achse auf mich zeigt, soll er um global y-z-Drehen.
Und natürlich die kombinatorik aus allem. Sprich die Zwischenstufen auch.
Ich schaffe es immer nur um zwei der drei Vorgaben zu drehen.
Hab jetzt die dritte Drehung auf die rechte Maustaste gelegt.
Ein einfaches Beispiel zu testen.
Zeichnet ein Quader mit ungleichen Kantenlängen und probiert nun mit den zwei Mausachsen und einer Maustaste alle lagen des Quaders durch Rotation zu erreichen.
Ihr werdet immer einen Fall haben, den Ihr nicht erreichen könnt (z.B. ein der flachen Seiten wird man niemals aufrecht zum stehen bekommen).
Alle Beispiele die ich irgendwie zu Rotation gefunden habe decken genau das nicht ab. Die gängigen 3D-Viewer schon und ich weiß nicht wie die das schaffen.
Ich hoffe das mein Problem ein wenig klarer geworden ist.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also so genau kann ich dir jetzt nicht sagen was du machen musst. Habe da gerade nicht den Kopf dazu um mich da reinzuversetzen. Aber die Rotation ist extrem Reihenfolgenabhängig. In einigen 3D Betrachtern ist die Reihenfolge zum Beispiel so, dass du irgendwie nie hinbekommst, dass das Objekt immer nach Oben zeigt. Dabei würde es ausreichen die X und Y Rotation umzudrehen. Damit wäre das Handling schlagartig besser. So hat man in einigen Betrachtern das Problem, dass irgendwann die Objekte so etwas von Schief im Raum stehen, dass man den nur neustarten kann.
ich habe auch Deine Beiträge dazu gelesen, aber auch da wird sich nur mit der Rotation um zwei Achsen beschäfftigt (in Abhängigkeit der beiden Maustasten)
Zweitens:
Du glaubst nich wie quer man Modelle drehen kann. Mittlerweile habe ich alle erdenklichen Einstellungen durch.
Global drehen um eine Achse, lokal um eine andere.
Ich bin jetzt wieder zurück gegangen, so das ich global gar nicht mehr drehe, sondern nur noch lokal und wie gesagt, die dritte Achse liegt bei mir jetzt auf der rechten Maustaste.
Die Reihenfolgenunterscheidung habe ich auch schon durch.
So der Test wie folgt:
lokale Rotation um erst x, dann y: Rotiert korrekt relativ zum globalen Koordinatensystem um x, aber nicht um y.
lokale Rotation um erst y, dann x: Rotiert korrekt relativ zum globalen Koordinatensystem um y, aber nicht um x.
So das eine kombination der beiden in Abhängigkeiten (siehe mein letztes Posting) doch die Lösung liefern sollte, aber das tut es nicht.
Leider finde ich auch im WWW keine Beispiele, die sich mit dieser Tatsache beschäftigen. Da ich hier aber Visualisierer habe die genau das Verhalten wiederspiegeln, ist natürlich mein Ehrgeiz geweckt, das doch auch irgendwie hinzubekommen. Besonders da meine Kunden ein solches Verhalten erwarten.
Falls jemand einen Link dazu hat, immer her damit.
Registriert: Mi Mär 22, 2006 20:16 Beiträge: 22 Wohnort: Wuppertal
Du meinst, das die Achsen nicht mitrotiert werden sollen?
Die Rätsels Lösung ist, das glMultMatrix() und glRotate() immer mit der Formel A = A * B dreht.
Mich hat das Problem auch mal interessiert und bin auf eine Lösung gestoßen: für ein anderes Drehverhalten muss man mit A = B * A drehen. Das konnte ich bei meinem 3D-Spiel gutgebrauchen.
Im Anhang ist ein Demoprogramm samt Quelltext, das ein Quarder zeigt, den man mit 4 Methoden drehen kann: A = A * B; A = B * A und Open-GL's interne glMultMatrix()-Funktion, und auch der normalen glRotateF()-Funktion (beide arbeiten mit A = A * B).
Insgesamt 3x mit A = A * B und einmal mit A = B * A (anderes Drehverhalten)
Vielleicht ist es ja das, was du suchst.
Wie man OpenGL beibringt, es andersherum zu machen, hab ich auch nicht herausgefunden (weiß das jemand anders?), deswegen hatte ich mal meine eigene Matrix-Funktionen geschrieben, die das dann macht, sorum ich will.
PS die Bedienung des Demo-Programmes ist einfach: Über die Bildfläche fahren, Maustaste gedrückt halten und drehen: Linke Maustaste: X,Y-Achse Rechte Maustaste: Z-Achse
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Noop am Fr Mär 31, 2006 23:31, insgesamt 1-mal geändert.
ich habe mir Dein Beispiel angeschaut und es ist genau das was ich will.
Komisch, das es so ziemlich das einzige Beispiel ist, bei dem eine solche Art der Rotation mal implementiert ist.
Da ich aus der C++-Ecke komme, werd ich mal probieren deinen Code zu verstehen und in meinem Tool umzusetzen.
Wenn ich Fragen hab meld ich mich bestimmt hier nochmal.
Mitglieder in diesem Forum: 0 Mitglieder und 21 Gäste
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.