2009-08-04 3 views
2

Ich mache eine sehr einfache 3D-Szene, mit 5 Punkten in Weltkoordinaten. Ich möchte über die Szene navigieren, also definiere ich eine Kamera mit einem UP- und einem OUT-Vektor. Mit dieser Information erzeuge ich eine Rotationsmatrix in jedem Frame, die ich auf die Vektoren anwenden werde, um die Kamerakoordinaten zu erhalten.Wird dies zu einem Kardanverschluss führen?

Die Frage ist: Ich habe über Gimbal Lock als ein Problem mit dieser Methode gelesen, aber würde es in diesem Fall passieren?

Beachten Sie, dass ich die Rotationsmatrix in jedem Frame erzeuge und nicht akkumulativ rotiere. Könnte also in dieser Situation ein Schloss passieren? Wenn das der Fall wäre, was würden Sie vorschlagen, um sicher eine Rotation anzuwenden (aus den Vektoren UP und OUT)?

Danke

Antwort

4

Wenn durch OUT Sie "vorwärts" meinen, und dies ist immer senkrecht zum UP-Vektor, dann NEIN, Sie werden nicht auf Gimbal-Sperre stoßen.

Was Sie tun, ist eine Orientierungsmatrix aus den Vektoren UP und FORWARD zu erstellen, und das auf jeden Frame anzuwenden, was eine ziemlich übliche Methode zum Bewegen einer Kamera im Raum ist. Sie wenden nicht mehrere Rotationen an, die Euler-Winkel verwenden, was eine Ursache für den Kardanverschluss sein kann.

Hinweis zum Erstellen der Matrix müssen Sie auch einen "linken" (oder rechten) Vektor aus den Vektoren UP und FORWARD erstellen. Eine gute Einführung dazu ist here - beachte, dass dieses Beispiel dann Rotationen auf die Kameramatrix anwendet, was ein vollständig optionaler Schritt ist.

Wikipedia hat eine gute Erklärung von gimbal lock.

+0

Dank Justicle, das ist genau das, was ich mache. Was ich OUT-Vektor nenne, ist dein VORWÄRTS. Mit diesem (und einem Kreuzprodukt, um den dritten Vektor zu erhalten) erzeuge ich eine orthonormale Matrix und multipliziere sie mit den Vektoren, um sie zu transformieren. Danke für die Bestätigung. Ich war mir irgendwie sicher, dass das Gimbalschloss in diesem Fall nicht angewendet werden würde, aber ich wollte es sicherstellen, nur für den Fall. –

+0

Kein Problem, denken Sie daran, dass es keine Matrizen gibt, die eine kardanische Sperre verursachen, sondern die Kombination von Euler-Winkeln - siehe den Wikipedia-Link. – Justicle

1

Sie Gimbal-Lock-Problem auftreten, wenn Matrix-Ansatz Drehmatrizen zu erzeugen (für X, Y, Z) und multipliziert sie dann endgültig Rotationsmatrix zu erhalten. Wenn ich das verstanden habe, benutzt du OUT-Vektor, um Winkel zu erhalten (Alpha, Beta, Gamma), dann machst du Matrizen, schließlich - multiplizierst du sie, um die endgültige Matrix zu erhalten - dann wirst du auf Gimbal-Lock stoßen.

Eine Möglichkeit, dieses Problem loszuwerden, besteht darin, Quaternions für Berechnungen zu verwenden.

Auch, here Ich habe einige OpenGL-Tutorial über die Implementierung dieser gefunden.

Verwandte Themen