J'utilise la bibliothèque de mathématiques OpenGL ( glm.g-truc.net ) et je veux initialiser un glm::mat4
avec un float-array.
float aaa[16];
glm::mat4 bbb(aaa);
Ça ne marche pas.
Je suppose que la solution est triviale, mais je ne sais pas comment le faire. Je n'ai pas pu trouver une bonne documentation sur glm. J'apprécierais quelques liens utiles.
Bien qu'il n'y ait pas de constructeur, GLM inclut les fonctions make_ * dans glm/gtc/type_ptr.hpp :
#include <glm/gtc/type_ptr.hpp>
float aaa[16];
glm::mat4 bbb = glm::make_mat4(aaa);
Vous pouvez également copier directement la mémoire:
float aaa[16] = {
1, 2, 3, 4,
5, 6, 7, 8,
9, 10, 11, 12,
13, 14, 15, 16
};
glm::mat4 bbb;
memcpy( glm::value_ptr( bbb ), aaa, sizeof( aaa ) );
Vous pouvez écrire une fonction d'adaptateur:
template<typename T>
tvec4<T> tvec4_from_t(const T *arr) {
return tvec4<T>(arr[0], arr[1], arr[2], arr[3]);
}
template<typename T>
tmat4<T> tmat4_from_t(const T *arr) {
return tmat4<T>(tvec4_from_t(arr), tvec4_from_t(arr + 4), tvec4_from_t(arr + 8), tvec4_from_t(arr + 12));
}
// later
float aaa[16];
glm::mat4 bbb = tmac4_from_t(aaa);