Commit b4e75654 authored by TYAGIRIS's avatar TYAGIRIS
Browse files

fix for head tracking input in quat format, added conversion from quat to euler in degrees

parent 12a463d1
Loading
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -4597,6 +4597,15 @@ void Quat2Euler(
    float *roll                                                 /* o  : roll                                                    */
);

#ifdef SPLIT_REND_WITH_HEAD_ROT
void Quat2EulerDegree(
    const IVAS_QUATERNION quat, /* i  : quaternion describing the rotation             */
    float *yaw,                 /* o  : yaw                                            */
    float *pitch,               /* o  : pitch                                          */
    float *roll                 /* o  : roll                                           */
);
#endif

void SHrotmatgen( 
    float SHrotmat[SBA_NHARM_HOA3][SBA_NHARM_HOA3],             /* o  : SHD rotation matrix                                     */
    float Rmat[3][3],                                           /* i  : real-space rotation matrix                              */
+3 −3
Original line number Diff line number Diff line
@@ -1225,7 +1225,7 @@ void ivas_binRenderer(
            Quaternions_ref = &hHeadTrackData->Quaternions[hHeadTrackData->num_quaternions - 1];
            Quaternions_rel.w = -3.0f;                                                                        /*euler*/
            Quaternions_abs.w = -3.0f;                                                                        /*euler*/
            Quat2Euler( *Quaternions_ref, &Quaternions_abs.z, &Quaternions_abs.y, &Quaternions_abs.x ); /*order in Quat2Euler seems to be reversed ?*/
            Quat2EulerDegree( *Quaternions_ref, &Quaternions_abs.z, &Quaternions_abs.y, &Quaternions_abs.x ); /*order in Quat2Euler seems to be reversed ?*/
            // Quaternions_abs.x = Quaternions_ref->x;
            // Quaternions_abs.y = Quaternions_ref->y;
            // Quaternions_abs.z = Quaternions_ref->z;
+39 −0
Original line number Diff line number Diff line
@@ -150,6 +150,45 @@ void QuatToRotMat(
    return;
}

#ifdef SPLIT_REND_WITH_HEAD_ROT
/*-------------------------------------------------------------------------
 * Quat2EulerDegree()
 *
 * Quaternion handling: calculate corresponding Euler angles in degrees
 *------------------------------------------------------------------------*/
void Quat2EulerDegree(
    const IVAS_QUATERNION quat, /* i  : quaternion describing the rotation             */
    float *yaw,                 /* o  : yaw                                            */
    float *pitch,               /* o  : pitch                                          */
    float *roll                 /* o  : roll                                           */
)
{
    if ( quat.w != -3.0 )
    {
        *yaw = atan2f( 2 * ( quat.w * quat.x + quat.y * quat.z ), 1 - 2 * ( quat.x * quat.x + quat.y * quat.y ) );
        *pitch = asinf( 2 * ( quat.w * quat.y - quat.z * quat.x ) );
        *roll = atan2f( 2 * ( quat.w * quat.z + quat.x * quat.y ), 1 - 2 * ( quat.y * quat.y + quat.z * quat.z ) );
        *yaw *= _180_OVER_PI;
        *pitch *= _180_OVER_PI;
        *roll *= _180_OVER_PI;
    }
    else
    {
        /* Euler angles in R_X(roll)*R_Y(pitch)*R_Z(yaw) convention
         *
         *  yaw:   rotate scene counter-clockwise in the horizontal plane
         *  pitch: rotate scene in the median plane, increase elevation with positive values
         *  roll:  rotate scene from the right ear to the top
         */
        *yaw = quat.z;
        *pitch = quat.y;
        *roll = quat.x;
    }

    return;
}
#endif

/*-------------------------------------------------------------------------
 * Quat2Euler()
 *
+3 −3
Original line number Diff line number Diff line
@@ -585,8 +585,8 @@ static void get_interpolation_vars(

    /*interpolation if actual pose is not same as one of assumed poses*/
    /*get the deviation*/
    Quat2Euler( *Quaternions_ref, &quaternions_ref_euler.z, &quaternions_ref_euler.y, &quaternions_ref_euler.x ); /*order in Quat2Euler seems to be reversed ?*/
    Quat2Euler( *Quaternions_act, &quaternions_act_euler.z, &quaternions_act_euler.y, &quaternions_act_euler.x ); /*order in Quat2Euler seems to be reversed ?*/
    Quat2EulerDegree( *Quaternions_ref, &quaternions_ref_euler.z, &quaternions_ref_euler.y, &quaternions_ref_euler.x ); /*order in Quat2Euler seems to be reversed ?*/
    Quat2EulerDegree( *Quaternions_act, &quaternions_act_euler.z, &quaternions_act_euler.y, &quaternions_act_euler.x ); /*order in Quat2Euler seems to be reversed ?*/
    quaternions_diff.w = -3.0f;                                                                                         /*euler*/
    quaternions_diff.x = quaternions_act_euler.x - quaternions_ref_euler.x;
    quaternions_diff.y = quaternions_act_euler.y - quaternions_ref_euler.y;