2011-09-08 2 views
32

OpenGL 수학 라이브러리 (glm.g-truc.net)를 사용 중이며 glm::mat4을 플로트 배열로 초기화하려고합니다.배열로 glm :: mat4를 초기화하는 방법은 무엇입니까?

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

이것은 작동하지 않습니다.

나는 솔루션이 간단하다고 생각하지만, 어떻게해야할지 모르겠다. glm에 대한 좋은 설명서를 찾을 수 없습니다. 나는 도움이되는 몇 가지 링크를 고맙게 생각한다.

답변

56

을, GLM은 glm/gtc/type_ptr.hpp 년으로 make_ * 기능을 포함 : 당신이 직접 메모리를 복사 할 수 있습니다

#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)); 
관련 문제