将GLM矩阵4X4(mat4)转换为数组并返回

4

我需要将一个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类型。

1个回答

1

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


在sqlite3中,BLOB类型似乎是我至少选择的选项 - 更紧凑且直接进行序列化/反序列化。我希望会有一个glm库功能,可以直接从矩阵中获取浮点数,而不必先经过Vec4类型。 - narkis
一个简化此转换的解决方案似乎已经出现: - narkis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接