Мне нужно поместить математическую библиотеку 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
BLOB тип в sqlite3, по-видимому, является для меня выбором, по крайней мере, более компактным и прямым для сериализации/десериализации. Я бы хотел, чтобы просто была функция glm lib, чтобы просто получить float из матриц, не перейдя сначала с Vec4. – narkis
одно решение упрощает это преобразование: – narkis