2

glm 数学ライブラリ mat4 を sqlite3 BLOB に入れて戻す必要があります。最も効率的なアプローチは何でしょうか? mat4 をバイトにシリアル化しますか?、mat4 を float 配列にしますか? BLOB は mat4 を直接取りません

フロートの配列にmat4のブルートフォース変換を追加する

             :) using namespace glm;

              mat4 fM;  
              float fma[16];

              vec4 t0 = fM[0];
              vec4 t1 = fM[1];
              vec4 t2 = fM[2];
              vec4 t3 = fM[3];



            fma[0] = t0[0];
            fma[1] = t0[1];
            fma[2] = t0[2];
            fma[3] = t0[3];

            fma[4] = t1[0];
            fma[5] = t1[1];
            fma[6] = t1[2];
            fma[7] = t1[3];

            fma[8] = t2[0];
            fma[9] = t2[1];
            fma[10] = t2[2];
            fma[11] = t2[3];

            fma[12] = t3[0];
            fma[13] = t3[1];
            fma[14] = t3[2];
            fma[15] = t3[3];

これは正しく動作することがテストされていますが、もっと良い方法があるはずです。float[16] から mat4 への変換は、glm ライブラリ glm/gtc/type_ptr.hpp によって処理されます - 正常に動作します。sqlite3 の BLOB は float 配列を直接受け取ります。

解決済み:

#include <glm/glm.hpp>
#include <glm/gtc/type_ptr.hpp>

float *fM;
glm::mat4 matrix;
fM = glm::value_ptr(matrix);
sqlite3_bind_blob(stmt, 0, fM, sizeof(fM), SQLITE_STATIC);

上記は glm::mat4 の値を float 配列に変換し、単一の BLOB 型として sqlite3 に保存できます

4

1 に答える 1

1

現在、似たようなことをやっていますので、参考になれば幸いです。私がやっていることは、マトリックスをフロートに変換し、次に文字列に変換してxmlに保存することです。フロート配列をSQLiteデータベースに文字列として保存することで、同じことができます。

于 2013-06-21T14:13:40.577 に答える