Question

J'utilise la bibliothèque OpenGL mathématiques ( glm.g-truc.net ) et que vous voulez initialiser un glm::mat4 avec un flotteur-tableau.

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

Cela ne fonctionne pas.

Je suppose que la solution est trivial, mais je ne sais pas comment le faire. Je ne pouvais pas trouver une bonne documentation sur GLM. Je vous serais reconnaissant quelques liens utiles.

Était-ce utile?

La solution

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

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

Autres conseils

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'adaptation:

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top