Let's say the Direct3D Matrix is D3DXMATRIX

and max Matrix is Matrix3

I tried to decompose Matrix3 into head, pitch, bank first, then combine them again using yaw, pitch, roll,

void SimExporter::ConvertMatrix3ToEuler() { double sp = elements[1][2]; if (sp <= -1.0f) { p = -1.570796f; } else if (sp >= 1.0f) { p = 1.5707096f; } else { p = asin(sp); } if (sp > 0.9999f) { b = 0.0f; h = atan2(elements[2][0], elements[0][0]); // m31 and m11 } else { h = atan2(elements[0][2], elements[2][2]); // m13 and m33 b = atan2(elements[1][0], elements[1][1]); // m21 and m22 } }

Then swap b,h

D3DXMatrixRotationYawPitchRoll(&yawpitchroll, b, p, h);

And convert the D3DXMATRIX back to euler to check

What I expected was something like

Original Euler

x: 30, y: 0, z:180

would become

x:30, y:180, z:0

But in fact, it isn't.

What is the general approach to convert a Matrix3 Matrix into a D3DXMATRIX affine matrix?

Thanks

Jack

**Edited by lucky6969b, 25 February 2013 - 05:02 AM.**