Forum: Offtopic 2D-Maus → 3D-Rotation


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Johann L. (gjlayde) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
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?

von Joe F. (easylife)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Georg A. (georga)


Bewertung
0 lesenswert
nicht lesenswert
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...

von Pandur S. (jetztnicht)


Bewertung
-1 lesenswert
nicht lesenswert
Nimm eine 3D Spacemouse, alles Andere ist ein aergerlicher Murks. Und 
ja. Quaternionen.

von Johann L. (gjlayde) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
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, Yahoo oder Facebook? Keine Anmeldung erforderlich!
Mit Google-Account einloggen | Mit Facebook-Account einloggen
Noch kein Account? Hier anmelden.