2013-05-15 39 views
1

我需要把glm数学库mat4放到sqlite3 BLOB中并返回。什么是最有效的方法?将mat4序列化为字节?,将mat4变成浮点数组? BLOB不会拿MAT4直接GLM矩阵4X4(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上述转换成浮阵列,其然后可以被保存在sqlite3的作为一个单一的BLOB类型

回答

1

目前我在做类似的东西,所以我希望这会帮助你。 我正在做的是:将矩阵转换为浮点数,然后将其串入并存储在xml中,您可以通过将float数组作为字符串存储在SQLite数据库中来做同样的事情。

+0

sqlite3中的BLOB类型似乎是我的选择,至少 - 对于序列化/反序列化更简洁直接。我希望只需要glm lib功能就可以从矩阵中获取浮点数,而不必先通过Vec4类型。 – narkis

+0

一个解决方案似乎可以简化此转换: – narkis