我正在使用OpenGL數學庫(glm.g-truc.net),並想用浮點數組初始化glm::mat4
。如何用數組初始化glm :: mat4?
float aaa[16];
glm::mat4 bbb(aaa);
這不起作用。
我想解決方案是微不足道的,但我不知道該怎麼做。 我找不到關於glm的好文檔。我將不勝感激一些有用的鏈接。
我正在使用OpenGL數學庫(glm.g-truc.net),並想用浮點數組初始化glm::mat4
。如何用數組初始化glm :: mat4?
float aaa[16];
glm::mat4 bbb(aaa);
這不起作用。
我想解決方案是微不足道的,但我不知道該怎麼做。 我找不到關於glm的好文檔。我將不勝感激一些有用的鏈接。
,GLM包括make_ *功能glm/gtc/type_ptr.hpp:
#include <glm/gtc/type_ptr.hpp>
float aaa[16];
glm::mat4 bbb = glm::make_mat4(aaa);
你可以寫一個適配器功能:雖然目前還沒有一個構造
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);
您也可以直接複製內存:
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));
另外不要忘記確保源數組存儲**列明**,否則你將需要添加'glm :: mat4 bbbT = glm :: make_mat4(aaa); glm :: mat4 bbb = glm :: transpose(bbbT);' –