DirectX - получите Pitch Yaw Roll от XMMATRIX - PullRequest
0 голосов
/ 22 февраля 2020

Я хочу сделать следующее:

DirectX::XMMATRIX Rotation = DirectX::XMMatrixRotationRollPitchYaw( m_flt_Pitch, m_flt_Yaw, m_flt_Roll);

Итак, у меня есть «Поворот», и я хочу получить m_flt_Pitch, m_flt_Yaw и m_flt_Roll:

m_flt_Pitch = GetPitchFromXMMATRIX(Rotation);
m_flt_Yaw = GetYawFromXMMATRIX(Rotation);
m_flt_Roll = GetRollFromXMMATRIX(Rotation);

Может это будет сделано?

Спасибо.

1 Ответ

0 голосов
/ 25 февраля 2020

Вероятно, не самый эффективный способ, но:

void ExtractPitchYawRollFromXMMatrix(float* flt_p_PitchOut, float* flt_p_YawOut, float* flt_p_RollOut, const DirectX::XMMATRIX* XMMatrix_p_Rotation)
{
    DirectX::XMFLOAT4X4 XMFLOAT4X4_Values;
    DirectX::XMStoreFloat4x4(&XMFLOAT4X4_Values, DirectX::XMMatrixTranspose(*XMMatrix_p_Rotation));
    *flt_p_PitchOut = (float)asin(-XMFLOAT4X4_Values._23);
    *flt_p_YawOut = (float) atan2(XMFLOAT4X4_Values._13, XMFLOAT4X4_Values._33);
    *flt_p_RollOut = (float) atan2(XMFLOAT4X4_Values._21, XMFLOAT4X4_Values._22);
}

Полученные углы могут не соответствовать исходным углам, использованным для создания матрицы. Но вместе они создают одну и ту же матрицу.

Спасибо.

...