47

私は OpenGL 数学ライブラリ ( glm.g-truc.netglm::mat4 ) を使用しており、float 配列で aを初期化したいと考えています。

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

これはうまくいきません。

解決策は些細なことだと思いますが、それを行う方法がわかりません。glm に関する適切なドキュメントが見つかりませんでした。役立つリンクをいただければ幸いです。

4

3 に答える 3

88

コンストラクターはありませんが、GLM には make_* 関数がglm/gtc/type_ptr.hppに含まれています。

#include <glm/gtc/type_ptr.hpp>
float aaa[16];
glm::mat4 bbb = glm::make_mat4(aaa);
于 2011-09-13T20:38:14.210 に答える
11

メモリを直接コピーすることもできます:

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 ) );
于 2013-07-15T14:31:18.843 に答える
4

アダプター関数を書くことができます:

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);
于 2011-09-13T00:22:22.960 に答える