47 votes

Comment initialiser un glm::mat4 avec un tableau ?

J'utilise la bibliothèque de mathématiques OpenGL ( glm.g-truc.net ) et je souhaite initialiser un glm::mat4 avec un tableau flottant.

 float aaa[16];
glm::mat4 bbb(aaa);

Cela ne fonctionne pas.

Je suppose que la solution est triviale, mais je ne sais pas comment le faire. Je n'ai pas trouvé de bonne documentation sur glm. J'apprécierais quelques liens utiles.

92voto

Matthew Marshall Points 2521

Bien qu'il n'y ait pas de constructeur, GLM inclut des fonctions make_* dans glm/gtc/type_ptr.hpp :

 #include <glm/gtc/type_ptr.hpp>
float aaa[16];
glm::mat4 bbb = glm::make_mat4(aaa);

11voto

Anderson Silva Points 31

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 ) );

4voto

bdonlan Points 90068

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);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X