I want to calculate difference between two rotations in Y axis (pitch). I found this code in UE source:
const FVector RotationDiff = (InCurrentBoneTransform.GetRotation() * InRefPoseBoneTransform.GetRotation().Inverse()).Euler();
It works allright for yaw and roll, but cannot handle pitch > 90°. (I believe this is due to “gimbal lock” problem)
I found a way to calculate pitch correctly when there is no rotation around x/z axis: acos of a dot product between 2 forward vectors.
But I don’t understand what I’m supposed to do if there is rotation around 2 or 3 axis.