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はglm/gtc/type_ptr.hppでmake_ *関数が含まれています。あなたはまた、直接メモリをコピーすることができ
#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); ' –