2011-09-08 30 views
32

Estoy usando OpenGL Mathematics Library (glm.g-truc.net) y quiero inicializar un glm::mat4 con un float-array.¿Cómo inicializar un glm :: mat4 con una matriz?

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

Esto no funciona.

Supongo que la solución es trivial, pero no sé cómo hacerlo. No pude encontrar una buena documentación sobre glm. Agradecería algunos enlaces útiles.

Respuesta

56

Aunque no es un constructor, GLM incluye funciones make_ * en glm/gtc/type_ptr.hpp:

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

Además, no te olvides de asegurarte de que la matriz fuente está almacenada ** en columnas **, de lo contrario necesitarás para agregar 'glm :: mat4 bbbT = glm :: make_mat4 (aaa); glm :: mat4 bbb = glm :: transponer (bbbT); ' –

3

Se podría escribir una función de adaptador:

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

También puede copiar directamente a la memoria:

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