Hi, ich suche das Verfahren, nach dem viele Grafik-Anwendungen Objekte per Maus drehen: 1) Zieht man die Maus (üblicherweise während deren linke Taste gedrückt bleibt) über der Mitte der Grafik, wird das dargestellte Objekt um die Achse rotiert, die senkrecht zur Mausbewegung und parallel zur Bildschirm- bzw. Projektionsebene verläuft. 2) Zieht man die Maus in der Nähe des Randes, wird die Komponente in Richtung Bildmitte wie in 1) umgesetzt, und zusätzlich wird die Komponente senkrecht dazu in eine Rotation senkrecht zur Bildschirm- bzw. Projektionsebene umgesetzt. Hier als Beispiel in einem Java-Applet: Die Darstellung der Klein'schen Flasche kann durch o.g. Mausbewegung gedreht werden. http://www.javaview.de/demo/surface/common/PaSurface_KleinBottle.html Wie bildet man die 2D-Bewegung der Maus auf eine Rotation ab, und welche Rotations-Darstellung ist hier vorteilhaft? Intuitiv würd ich auf Quaternionen tippen. Im Natz find ich nix dazu, vermutlich hab ich die falschen Suchbegriffe... Da das Verfahren "üblich" ist, müsste sich doch was dazu finden lassen?
Ich erlaube meinem Browser kein Java-Plugin, daher weiss ich nicht wie dein Beispiel es macht. Google-Earth hat aber glaube ich eine auf deine Beschreibung passende Bedienung. Wenn man da einen Punkt auf der Erde mit der linken Maustaste "festhält" kann man ihn mit der Maus an einen anderen Punkt schieben, und der Globus dreht sich dementsprechend. Am äußeren Rand bzw. noch weiter ausserhalb rotiert der Ball dann um die Achse senkrecht zum Bildschirm. Ich denke das Prinzip ist relativ einfach: man errechnet den Punkt auf der Kugel, auf den die Maus zeigt und rechnet das in Polarkoordinaten um. Jetzt verschiebst du die Maus auf einen neuen Punkt und erhältst neue Polarkoordinaten. Daraus ergibt sich dann die gewünschte Drehung.
Bei Blender ist links-rechts immer eine Drehung um die 3D-Z-Achse (wenn Z von unten nach oben läuft) des Mittelpunkts auf den man schaut. Rauf-runter dreht um eine Achse, die einerseits in der XY-Ebene (Z=Mittelpunkt-Z) und andererseits senkrecht auf der Verbindung Kamera-Mittelpunkt steht. Da kanns nur eine geben ;) Damit bleibt man immer in vernünftigen Ansichten...
Nimm eine 3D Spacemouse, alles Andere ist ein aergerlicher Murks. Und ja. Quaternionen.
Meine Frage bezog sich auf einen bestimmten Algorithmus, also Software. Es gibt auch keine "vernünftigen Ansichten" bzw. Orienterung, da das zu betrachtende Objekte kein Unten und Oben etc. hat: Es sind z.B. algebraische Flächen oder Immersion bestimmter Mannigfaltigkeiten / Geometrien. Konkret eine Darstellung der Boy'schen Fläche. Folgendes funktioniert: Über die Grafik legt man eine gedachte Kugel mit Durchmesser ca. Größe der Grafik und Nordpol im Zentrum. Der Ort der Maus definiert einen Punkt M darauf (falls die Maus außerhalb ist, projeziert man M auf den Äquator). Dann heftet man das durch die Mausbewegung gegebene ΔM, das in eine Rotation umzusetzen ist, an den Nordpol und dreht es zum Punkt M. Schließlich dreht man das Objekt um ΔM bzw. akkumuliert ΔM zur Gesamtrotation des Objekts. Über Quaternionen hatte ich bisher nur gelesen und nun zum 1. mal implementiert. Einfach genial :-) Die Anwendung ist noch einfach genug, dass ich alle Rotationen mit Quaternionen erledigen kann und Effizienz noch keine Rolle spielt, d.h. ich brauch keine Matrizen. Quaternionen sind auch deshalb besser geeignet, weil Fehler sich anders akkumulieren: Fehler hat man zwangsläufig durch Akkumulation von Rundungsfehlern über die vielen (kleinen) Rotationen. Der Fehler ist aber "nur" im Drehwinkel und in der Achse — wenn diese nicht genau stimmen wird der Anwender weiter drehen. Das Quaternion stellt aber immer eine Rotation dar; im Gegensatz zu einer Matrix, die viel mehr Freiheitsgrade hat und nicht-orthogonale Artefakte ansammeln würde.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.