Quaternionen "flippen" um 180 Grad
-
Hallo Leute,
Ich beschaeftige mich gerade zum ersten mal mit Quaternionen Rotationen, damit ich eine Kamera implementieren kann, die sich um alle 3 Achsen drehen kann. Ich hab also erstmal angefangen, lediglich rauf/runter zu implementieren und schon das klappt nicht so wirklich.
if (rotateUp || rotateDown) { auto turn = elapsed * turnSpeed_; auto& r = cameraLocation_.rotation; if (rotateUp) r *= glm::quat(-turn, glm::vec3(1.f, 0.f, 0.f)); if (rotateDown) r *= glm::quat(turn, glm::vec3(1.f, 0.f, 0.f)); r = glm::normalize(r); std::cout << "rotation = (" << r.w << ", (" << r.x << ", " << r.y << ", " << r.z << "))\n"; updateProjectionWorld(); }
Die w-Komponente flippt immer zwischer Werten nahe an -1, 0 und 1, obwohl sie eigentlich 1 bleiben sollte...
Hier Beispiel (leider schlechte Quali): http://i.gyazo.com/852fb84ad4f0d2ea20d29915dcf3fb60.gif
Noch ein besserer Screenshot von den ersten Werten: http://i.gyazo.com/b604ef1439b13615204ef07d8b3a2d9b.png
Durch dieses flippen kommt der Effekt zu stande, dass mein Wuerfel waehrend des Rotierens dauernd blinkt.Weiss jemand weiter?
Gruesse,
Der Kellerautomat
-
Ich habe es mittlerweile von selbst rausgefunden. Der glm::quat Konstruktor macht nicht das, was ich dachte. Stattdessen brauchte ich glm::angleAxis.
Vielen danke glm fuer diesen Fehler, schon zum zweiten mal heute. Drecks Lib.