2013-07-19 42 views
0

我想从方向四元数和位置矢量创建一个初始转换矩阵。将glm :: mat4转换为XMFLOAT4X4

我的初始矩阵是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矩阵尝试转换它。

+0

你到目前为止尝试了什么?根据http://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.reference.xmfloat4x4(v=vs.85).aspx,'XMFLOAT4x4'只是一个简单的联合。所以,你可以尝试只是memcpy(但您应该关心glm和xnamath存储矩阵的顺序 - 列或行) – acrilige

+0

请参阅上面的更新 – fishfood

+0

尝试使用glm :: valut_ptr – acrilige

回答

0

XMFLOAT4X4具有float *一个构造函数,因此你可以拨打:

auto xmMatrix = XMFLOAT4X4(&glmMatrix[0][0]); 

只要确保你的矩阵是相同的尺寸,并使用相同的行/列的主要排序。