Mam nadzieję, że znasz GL Mathematics ( GLM ), ponieważ mam problem, nie mogę złamać:
Mam zestaw kątów Eulera i muszę wykonać płynną interpolację między nimi. Najlepszym sposobem jest ich konwersja do Quaternions i zastosowanie alrogirthm SLERP.
Mam problem z inicjowaniem glm :: quaternion za pomocą Euler Angles, proszę?
Wciąż czytam Dokumentację GLM , ale nie mogę znaleźć odpowiedniego Quaternion constructor signature
, który zająłby trzy Kąty Eulera. Najbliższą, jaką znalazłem, jest
funkcja angleAxis () , która przyjmuje wartość kąta i oś dla tego kąta. Uwaga, proszę, czego szukam, jak analizować RotX, RotY, RotZ
.
Dla Twojej informacji jest to powyższa sygnatura funkcji metnioned angleAxis () :
detail::tquat< valType > angleAxis (valType const &angle, valType const &x, valType const &y, valType const &z)
operator *
dla mnożenia Quaternion, więc być może będę musiał ręcznie wykonać mnożenie .W przypadku, gdy
angle
jestglm::vec3
zawierającym pak, odchylenie zwijana odpowiednio.PS. W razie wątpliwości przejdź do nagłówków i spójrz. Definicję można znaleźć w glm / gtc / quaternion.hpp:
Gdzie
quat
jest typ zmiennoprzecinkowytquat
.źródło
Rozwiązanie jest w wikipedii: http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles
używając tego:
Konstruktory dla czwartorzędu, biorąc pod uwagę Euler (gdzie zastosowanie obrotu to XYZ lub ZYX). Są to jednak tylko dwie z sześciu możliwych kombinacji kątów Eulera. Naprawdę musisz dowiedzieć się, w jakiej kolejności konstruowane są kąty Eulera podczas konwersji na macierz transformacji. Tylko wtedy można zdefiniować rozwiązanie.
W starej firmie, w której pracowałem, mieliśmy Z jako naprzód (jak większość kart graficznych), więc kolejność aplikacji była ZYX, aw mojej obecnej firmie oś Y jest do przodu, a Z jest w górze, więc nasza kolejność aplikacji to YZX. Ta kolejność to kolejność, w której mnożą się twoje czwartorzędy, aby wygenerować ostateczną transformację, a kolejność ma znaczenie dla rotacji, ponieważ mnożenia nie są przemienne.
źródło
fAngle musi być w radianach!
źródło