Hi guys, I'm trying to replace my quaternion rotations with matrix rotations (please don't ask why). I can't seem to get it right. Here is the code:
// axes
float3 xAxis(1.0f, 0.0f, 0.0f);
float3 yAxis(0.0f, 1.0f, 0.0f);
float3 zAxis(0.0f, 0.0f, 1.0f);
// create the quaternions
float4 qX, qY, qZ, qComp, qTemp;
quaternionRotationNormal(&qX, &xAxis, rot_x);
quaternionRotationNormal(&qY, &yAxis, rot_y);
quaternionRotationNormal(&qZ, &zAxis, rot_z);
// combine (multiply) and normalize
quaternionMultiply(&qTemp, &qX, &qY);
quaternionMultiply(&qComp, &qTemp, &qZ);
quaternionNormalize(&qComp);
// create rotation matrix from quaternions
float4x4 mR;
matrixRotationQuaternion(&mR, &qComp);
Here is what I've come up with so far:
// axes
float3 xAxis(1.0f, 0.0f, 0.0f);
float3 yAxis(0.0f, 1.0f, 0.0f);
float3 zAxis(0.0f, 0.0f, 1.0f);
// create x rotation matrix
float4x4 mX;
matrixRotationX(&mX, rot_x);
// transform y and z-axes by x matrix
transformVector(&yAxis, &mX);
transformVector(&zAxis, &mX);
// create y rotation matrix
xmfloat4x4 mY;
matrixRotationAxis(&mY, &yAxis, rot_y);
// transform z-axis by y matrix
transformVector(&zAxis, &mY);
// create z rotation matrix
xmfloat4x4 mZ;
matrixRotationAxis(&mZ, &zAxis, rot_z);
// combine
xmfloat4x4 mTemp, mR;
matrixMultiply(&mTemp, &mX, &mY);
matrixMultiply(&mR, &mTemp, &mZ);
The behavior should be (almost) identical but it isn't. I hope someone can help. Thanks.