I'm doing character control with kinect. I need to mirror the joint orientation because the character faces the player. Somehow by Googling through internet I've done it and everything works very well. But I have little idea about how the math works, here's my code:
//-------------------------------------------------------------------------------------
Ogre::Quaternion JointOrientationCalculator::buildQuaternion(Ogre::Vector3 xAxis, Ogre::Vector3 yAxis, Ogre::Vector3 zAxis)
{
Ogre::Matrix3 mat;
if(isMirror)
{
mat = Ogre::Matrix3(xAxis.x, yAxis.x, zAxis.x,
xAxis.y, yAxis.y, zAxis.y,
xAxis.z, yAxis.z, zAxis.z);
Ogre::Matrix3 flipMat(1, 0, 0,
0, 1, 0,
0, 0, -1);
mat = flipMat * mat * flipMat;
}
else
{
mat = Ogre::Matrix3(xAxis.x, -yAxis.x, zAxis.x,
-xAxis.y, yAxis.y, -zAxis.y,
xAxis.z, -yAxis.z, zAxis.z);
}
Ogre::Quaternion q;
q.FromRotationMatrix(mat);
return q;
}
When I need to mirror/flip it by axes z I calculate mat = flipMat * mat * flipMat;
but I don't understand how this equation works.