In OpenGL relativ zum Ansichtsfenster drehen

8

Ich versuche, ein Objekt in der Ansicht anzuzeigen, das auf natürliche Weise durch Ziehen des Cursors / Touchscreens gedreht werden kann. Im Moment habe ich eine X- und Y-Drehung eines Objekts wie dieses

%Vor%

Ich verstehe, warum dies nicht das tut, was ich möchte (z. B. wenn Sie es um 180 Grad drehen, wird das Drehen nach oben und unten umgekehrt). Ich kann einfach keinen Weg finden, dass beide Richtungen links-rechts und oben-unten relativ zum Betrachter bleiben.

Ich kann davon ausgehen, dass die Kamera fest ist und entlang der Z-Achse schaut. Irgendwelche Ideen?

    
Nick 03.05.2010, 13:51
quelle

3 Antworten

7

Ihre beste Wette ist es, eine Quaternion -basierte Rotation zu implementieren. In der Quaternion-Welt wird jedes Mal, wenn Sie sich drehen, die Achse auf die von Ihnen angegebene Achse ausgerichtet, ohne von den vorherigen Rotationen betroffen zu sein. Dies ist auch der Grund, warum es nicht unter Gimbal Lock leidet.

Ich habe diese Seiten für die Implementierung von Quaternionen hilfreich gefunden:

Viel Glück. Ich bin sicher, es gibt andere Lösungen, aber diese ist eine der saubersten, die Sie haben können.

    
Xavier Ho 03.05.2010, 14:20
quelle
2

Gelöst es! Fügen Sie der aktuellen Matrix xAngle und yAngle hinzu.

%Vor%     
Kyle 13.01.2012 14:53
quelle
1

Ich habe beschlossen, meine DragControl-Klasse zusammen mit der Quaternion-Supportklasse zum Download anzubieten. Sobald Sie einen OpenGL-Canvas haben, der entlang der Z-Achse auf ein Objekt schaut, sollte es wenig Aufwand sein, dies einzufügen. Es sind nur die einfachen .java-Dateien, derzeit keine eingebaute Bibliothek.

DragControl beherrscht praktisch alles, einschließlich des Fingerschleuderns, so dass Sie Ihr Objekt mit einem Schwung drehen lassen können.

Ссылка

In der Aktivitätseinstellung:

%Vor%

Beim Aktualisieren der Objektdrehung in einer Schleife:

%Vor%

Wenn Sie irgendwelche coolen Änderungen vornehmen, würde ich sie gerne sehen.

    
Nick 10.09.2010 14:39
quelle

Tags und Links