2013-05-15 1 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 - работает так, как должно. BLOB в sqlite3 будет принимать массив с плавающей точкой напрямую.

РЕШИТЬ:

#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

На данный момент я делаю что-то подобное, поэтому я надеюсь, что это поможет вам. Что я делаю: преобразование матрицы в float, а затем в строку и сохранение ее в xml, вы можете сделать то же самое, сохранив ваш массив float как строку в базе данных SQLite.

+0

BLOB тип в sqlite3, по-видимому, является для меня выбором, по крайней мере, более компактным и прямым для сериализации/десериализации. Я бы хотел, чтобы просто была функция glm lib, чтобы просто получить float из матриц, не перейдя сначала с Vec4. – narkis

+0

одно решение упрощает это преобразование: – narkis

 Смежные вопросы

  • Нет связанных вопросов^_^