void vrpn_Sound_Server_Miles::changeListenerStatus(vrpn_ListenerDef listenerDef) //change pose, etc for listener { if (provider != 0) { vrpn_float32 uX = 0, uY = 1, uZ = 0; // switch to left handed listenerDef.pose.orientation[2] *= -1.0; listenerDef.pose.orientation[3] *= -1.0; listenerDef.pose.position[2] *= -1.0; AIL_set_3D_position(listener, listenerDef.pose.position[0], listenerDef.pose.position[1], listenerDef.pose.position[2]); // normalize listenerDef.pose.orientation[0] /= listenerDef.pose.orientation[3]; listenerDef.pose.orientation[1] /= listenerDef.pose.orientation[3]; listenerDef.pose.orientation[2] /= listenerDef.pose.orientation[3]; listenerDef.pose.orientation[3] /= listenerDef.pose.orientation[3]; q_matrix_type mymatrix; q_matrix_type multmatrix; q_type facevec; q_to_row_matrix(mymatrix, listenerDef.pose.orientation); // 90 degree rotation about x multmatrix[0][0] = 1; multmatrix[0][1] = 0; multmatrix[0][2] = 0; multmatrix[0][3] = 0; multmatrix[1][0] = 0; multmatrix[1][1] = 0; multmatrix[1][2] = -1; multmatrix[1][3] = 0; multmatrix[2][0] = 0; multmatrix[2][1] = 1; multmatrix[2][2] = 0; multmatrix[2][3] = 0; multmatrix[3][0] = 0; multmatrix[3][1] = 0; multmatrix[3][2] = 0; multmatrix[3][3] = 1; q_matrix_mult(mymatrix, mymatrix, multmatrix); q_from_row_matrix(facevec, mymatrix); AIL_set_3D_orientation(listener, listenerDef.pose.orientation[0], listenerDef.pose.orientation[1], listenerDef.pose.orientation[2], facevec[0], facevec[1], facevec[2]); AIL_set_3D_velocity(listener, listenerDef.velocity[0], listenerDef.velocity[1], listenerDef.velocity[2], listenerDef.velocity[3]); } else fprintf(stderr,"No provider has been set prior to changeListenerStatus\n"); }
void q_xyz_quat_to_row_matrix(q_matrix_type rowMatrix, q_xyz_quat_type *xyzQuatPtr) { int i; q_to_row_matrix(rowMatrix, xyzQuatPtr->quat); for ( i = 0; i < 3; i++ ) rowMatrix[3][i] = xyzQuatPtr->xyz[i]; } /* q_xyz_quat_to_row_matrix */