2013-05-15 37 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