web-dev-qa-db-fra.com

Comment initialiser un glm :: mat4 avec un tableau?

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.

36
j00hi

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);
64
Matthew Marshall

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

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