Saya harap Anda tahu GL Matematika ( GLM ) karena saya punya masalah, saya tidak bisa memecahkan:
Saya memiliki satu set Euler Angles dan saya perlu melakukan interpolasi yang lancar di antara mereka. Cara terbaik adalah mengonversinya ke Quaternions dan menerapkan alrogirthm SLERP.
Masalah yang saya miliki adalah bagaimana menginisialisasi glm :: angka empat dengan Euler Angles, tolong?
Saya membaca Dokumentasi GLM berulang kali, tetapi saya tidak dapat menemukan yang sesuai Quaternion constructor signature
, yang akan membutuhkan tiga Euler Angles. Yang paling dekat yang saya temukan adalah
fungsi angleAxis () , mengambil nilai sudut dan sumbu untuk sudut itu. Catatan, tolong, apa yang saya cari si cara, cara mengurai RotX, RotY, RotZ
.
Untuk informasi Anda, ini adalah tanda tangan fungsi metnioned angleAxis () di atas :
detail::tquat< valType > angleAxis (valType const &angle, valType const &x, valType const &y, valType const &z)
operator *
untuk multiplikasi Quaternion, jadi mungkin, saya harus melakukan multiplikasi secara manual .Di mana
angle
adalahglm::vec3
yang mengandung pitch, yaw, gulungan masing-masing.PS. Jika ragu, buka saja tajuk dan lihat. Definisi ini dapat ditemukan di glm / gtc / quaternion.hpp:
Di mana
quat
typedef float untuktquat
.sumber
Solusi ada di wikipedia: http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles
menggunakan itu:
Konstruktor untuk angka empat, diberi Euler (di mana aplikasi rotasi adalah XYZ atau ZYX). Namun, itu hanya dua dari enam kemungkinan kombinasi sudut Euler. Anda benar-benar perlu mencari tahu apa urutan sudut Euler dibangun ketika mengkonversi ke matriks transformasi. Hanya dengan demikian solusinya dapat didefinisikan.
Di perusahaan lama saya bekerja, kami memiliki Z sebagai maju (seperti kebanyakan kartu grafis) sehingga pesanan aplikasi adalah ZYX, dan di perusahaan saya saat ini sumbu Y maju dan Z naik, jadi pesanan aplikasi kami adalah YZX. Urutan ini adalah urutan Anda mengalikan angka empat Anda bersama-sama untuk menghasilkan transformasi akhir Anda, dan urutan masalah untuk rotasi adalah perkalian tidak komutatif.
sumber
fAngle harus dalam radian!
sumber