Я хочу создать исходную матрицу преобразования из кватерниона ориентации и вектора положения.
Моя исходная матрица представлена в формате 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] );
Просто убедитесь, что ваши матрицы имеют одинаковые размеры и используют одинаковый основной порядок строк / столбцов.
Других решений пока нет …