我需要将一个glm数学库的mat4放入sqlite3的BLOB中并取回。最有效的方法是什么?将mat4序列化为字节?将mat4转换为浮点数组?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可以直接接受浮点数数组。
已解决:
#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的值转换为浮点数数组,然后可以将其保存在SQLite3中作为单个BLOB类型。