2011-09-08 290 views
32

我正在使用OpenGL数学库(glm.g-truc.net),并想用浮点数组初始化glm::mat4如何用数组初始化glm :: mat4?

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

这不起作用。

我想解决方案是微不足道的,但我不知道该怎么做。 我找不到关于glm的好文档。我将不胜感激一些有用的链接。

回答

56

,GLM包括make_ *功能glm/gtc/type_ptr.hpp

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

另外不要忘记确保源数组存储**列明**,否则你将需要添加'glm :: mat4 bbbT = glm :: make_mat4(aaa); glm :: mat4 bbb = glm :: transpose(bbbT);' –

3

你可以写一个适配器功能:虽然目前还没有一个构造

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

您也可以直接复制内存:

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