Chcę obrócić mój samochód o 90 stopni w lewo w grze, którą mam.Jak prawidłowo obracać kwaterę GLM?
Kiedy używam tego kodu:
glm::quat rot(info.Rotation.w,info.Rotation.x,info.Rotation.y,info.Rotation.z);
glm::quat done(glm::rotate(rot,glm::eulerAngles(rot)+glm::vec3(90.0f,0.0,0.0)));
info.Rotation.x = done.x;
info.Rotation.y = done.y;
info.Rotation.z = done.z;
info.Rotation.w = done.w;
Samochód dostaje dziwny obrót.
Jednak następujące kody nie zmienia rotację samochodów w ogóle (tylko, czego się spodziewałem, tak aby mieć pewność, że GLM jest kompatybilny z czwartorzędowych z gry):
glm::quat rot(info.Rotation.w,info.Rotation.x,info.Rotation.y,info.Rotation.z);
glm::quat done(rot);
info.Rotation.x = done.x;
info.Rotation.y = done.y;
info.Rotation.z = done.z;
info.Rotation.w = done.w;
i gdy próbuję to, by sprawdzić, czy rotacja zmienia się z nim:
glm::quat rot(info.Rotation.w,info.Rotation.x,info.Rotation.y,info.Rotation.z);
glm::quat done(glm::rotate(rot,vec3(0.0,0.0,0.0)));
info.Rotation.x = done.x;
info.Rotation.y = done.y;
info.Rotation.z = done.z;
info.Rotation.w = done.w;
rotacja samochodów jest po prostu ustawić na 0,0,0,0 obrotów w grze. Spodziewałem obroty pozostają nietknięte z tym kodem, bo oczekiwano poniższy kod, żeby obrócić samochód o 90 stopni w lewo:
glm::quat rot(info.Rotation.w,info.Rotation.x,info.Rotation.y,info.Rotation.z);
glm::quat done(glm::rotate(rot,vec3(90.0,0.0,0.0)));
info.Rotation.x = done.x;
info.Rotation.y = done.y;
info.Rotation.z = done.z;
info.Rotation.w = done.w;
ale to nie działa tak, jak chcę. To po prostu Ustawia obrót, a nie dodaje go do "zgnilizny".
Co robię źle?
Spójrz na http://www.arcsynthesis.org/gltut/Positioning/Tut08%20Quaternions.html – user1929959
trued kod z tam, ale tak naprawdę nie obracać mojego samochodu, co jest potrzebne w "kąt" parametru, kąt samochodu, aby pozwolić mu działać poprawnie? Z Angle czy coś? –
@Gizmo: [Spójrz na to pytanie i odpowiedzi.] (Http://stackoverflow.com/q/9715776/734069) –