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