Frage

mache ich eine sehr einfache 3D-Szene, mit 5 Punkten in Weltkoordinaten. Ich möchte über die Szene navigieren so dass ich eine Kamera ist mit einem nach oben und aus Vektor definieren. Mit dieser Information erzeugen ich eine Rotationsmatrix in jedem Rahmen, die ich auf die Vektoren anwenden, um finden Sie die Kamerakoordinaten zu erhalten.

Die Frage ist: ich Gimbal Lock als Problem gelesen habe diese Methode verwenden, aber wäre es in diesem Fall passieren

?

Beachten Sie, dass ich die Rotationsmatrix in jedem Frame bin zu erzeugen, und ich bin nicht akkumulativ zu drehen. So konnte in dieser Situation eine Sperre passieren? Wenn das der Fall ist, was würden Sie vorschlagen, um sicher eine Drehung anzuwenden (von dem nach oben und aus Vektoren)?

Danke

War es hilfreich?

Lösung

Wenn durch OUT meinen Sie „vorwärts“, und das ist immer senkrecht zur UP Vektor, dann nein, Sie werden nicht Gimbal Lock begegnen.

Was Sie tun, ist eine Orientierung Matrix aus den oben und nach vorne Vektoren zu schaffen, und die Anwendung, dass jeder Rahmen, der zur Bewegung eine Kamera im Raum ein ziemlich übliches Verfahren ist. Sie sind nicht mehrere Umdrehungen mit Euler-Winkel Anwendung, die eine Ursache für Gimbal Lock sein kann.

Beachten Sie die Matrix erstellen Sie auch eine „links“ (oder rechts) Vektor aus den oben und nach vorne Vektoren erstellen müssen. Eine gute Einführung in diesem hier - beachten Sie, dass dieses Beispiel dann Drehungen gilt an die Kamera-Matrix, die ein völlig optionaler Schritt ist.

Wikipedia hat eine gute Erklärung von Gimbal Lock .

Andere Tipps

In Kürze erhalten Sie stoßen Gimbal-Lock-Problem beim Matrix-Ansatz Drehmatrizen zu erzeugen (für X, Y, Z) und dann Multiplizieren endgültige Rotationsmatrix zu erhalten. Wenn ich verstanden habe Sie, Sie Vektor verwenden OUT Winkel zu erhalten (alpha, beta, gamma), dann Matrizen Sie berechnen, schließlich - multiplizieren Sie sie endgültig roation Matrix zu erhalten - dann ja, werden Sie Gimbal Lock begegnen.

Eine Möglichkeit, dieses Problem loszuwerden, ist, zu verwenden, Quaternionen für Berechnungen.

Auch hier Ich habe einige OpenGL-Tutorial darüber, wie gefunden implementieren diese.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top