Advertisement
Guest User

Untitled

a guest
Dec 12th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.28 KB | None | 0 0
  1. //Ethan Alexander Shulman 2019
  2. //Converts OpenVR rotation matrix to quaternion with coordinate system +x,+y,+z
  3. void mat2quat(HmdMatrix34_t m, float *q) {
  4.     float rt = m.m[0][0] + m.m[1][1] + m.m[2][2];
  5.     if (rt > 0.0f) {
  6.         const float s = sqrtf(rt + 1.0f), b = 0.5f / s;
  7.         q[0] = (m.m[1][2]-m.m[2][1])*b;
  8.         q[1] = (m.m[2][0] - m.m[0][2])*b;
  9.         q[2] = (m.m[0][1] - m.m[1][0])*-b;
  10.         q[3] = s*0.5f;
  11.     }
  12.     else if (m.m[0][0] > m.m[1][1] && m.m[0][0] > m.m[2][2]) {
  13.         const float s = sqrtf(1.0f + m.m[0][0] - m.m[1][1] - m.m[2][2]), b = 0.5f / s;
  14.         q[0] = s*0.5f;
  15.         q[1] = (m.m[1][0] + m.m[0][1])*b;
  16.         q[2] = (m.m[2][0] + m.m[0][2])*-b;
  17.         q[3] = (m.m[1][2] - m.m[2][1])*b;
  18.     }
  19.     else if (m.m[1][1] > m.m[2][2]) {
  20.         const float s = sqrtf(1.0f + m.m[1][1] - m.m[0][0] - m.m[2][2]), b = 0.5f / s;
  21.         q[0] = (m.m[0][1] + m.m[1][0])*b;
  22.         q[1] = s*0.5f;
  23.         q[2] = (m.m[1][2] + m.m[2][1])*-b;
  24.         q[3] = (m.m[0][2] - m.m[2][0])*-b;
  25.     } else {
  26.         const float s = sqrtf(1.0f + m.m[2][2] - m.m[0][0] - m.m[1][1]), b = 0.5f / s;
  27.         q[0] = (m.m[0][2] + m.m[2][0])*-b;
  28.         q[1] = (m.m[1][2] + m.m[2][1])*-b;
  29.         q[2] = s*0.5f;
  30.         q[3] = (m.m[1][0] - m.m[0][1])*b;
  31.     }
  32. }
  33. ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement