我想根据方向四元数和位置矢量创建初始变换矩阵。
我的初始矩阵是glm格式,但是我想将glm矩阵转换为XMFLOAT4X4矩阵。
glm::mat4 glm_mWorld= glm::toMat4(_qOrientation);
glm_mWorld[3] = glm::vec4(_vPosition);
glm_mWorld = glm::transpose(glm_mWorld);
那么如何将glm_mWorld的内容加载到XMFLOAT4X4中呢?
更新:
因此,在建议我使用memcpy之后,我想到了以下内容:
XMFLOAT4X4 mTransform;
XMFLOAT4 qOrient;
glm::mat4 glm_mWorld = glm::toMat4(_descriptor._qOrientation);
glm_mWorld[3] = glm::vec4(_descriptor._vPosition);
glm_mWorld = glm::transpose(glm_mWorld);
memcpy(&mTransform.m[0][0], &glm_mWorld[0][0], sizeof(glm::mat4));
这会导致错误:
glm-0.9.4.3\glm\core\type_vec4.inl(251): error C2440: '<function-style-cast>' : cannot convert from 'const glm::vec3' to 'float'
另外,关于列主矩阵/行主矩阵,glm使用列主矩阵,而XMFLOAT4X4使用行主矩阵,这就是为什么在尝试转换它之前转置glm矩阵的原因。
最佳答案
XMFLOAT4X4
具有float *
的构造函数,因此您可以调用:
auto xmMatrix = XMFLOAT4X4( &glmMatrix[0][0] );
只要确保您的矩阵大小相同,并使用相同的行/列主排序即可。
关于c++ - 将glm::mat4转换为XMFLOAT4X4,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17743461/