author Jean-Luc Peurière Thu, 16 Aug 2007 16:02:42 +0000 (16:02 +0000) committer Jean-Luc Peurière Thu, 16 Aug 2007 16:02:42 +0000 (16:02 +0000)

@@ -1029,7 +1029,9 @@ void viewmoveNDOF(int mode)
float m;
float m_inv;
float xvec = {1,0,0};
float m;
float m_inv;
float xvec = {1,0,0};
-    float phi, si;
+    float yvec = {0,-1,0};
+    float zvec = {0,0,1};
+       float phi, si;
float q1;
float obofs;
float reverse;
float q1;
float obofs;
float reverse;
@@ -1162,6 +1164,8 @@ void viewmoveNDOF(int mode)
/* Determine the direction of the x vector (for rotating up and down) */
/* This can likely be compuated directly from the quaternion. */
Mat3MulVecfl(m_inv,xvec);
/* Determine the direction of the x vector (for rotating up and down) */
/* This can likely be compuated directly from the quaternion. */
Mat3MulVecfl(m_inv,xvec);
+    Mat3MulVecfl(m_inv,yvec);
+    Mat3MulVecfl(m_inv,zvec);

/* Perform the up/down rotation */
phi = sbadjust * rsens * /*0.5f * */ fval; /* spin vertically half as fast as horizontally */

/* Perform the up/down rotation */
phi = sbadjust * rsens * /*0.5f * */ fval; /* spin vertically half as fast as horizontally */
@@ -1180,7 +1184,18 @@ void viewmoveNDOF(int mode)
}

/* Perform the orbital rotation */
}

/* Perform the orbital rotation */
-    phi = sbadjust * rsens * reverse * fval;     /* twist the knob, y axis */
+    /* Perform the orbital rotation
+       If the seen Up axis is parallel to the zoom axis, rotation should be
+       achieved with a pure Roll motion (no Spin) on the device. When you start
+       to tilt, moving from Top to Side view, Spinning will increasingly become
+       more relevant while the Roll component will decrease. When a full
+       Side view is reached, rotations around the world's Up axis are achieved
+       with a pure Spin-only motion.  In other words the control of the spinning
+       around the world's Up axis should move from the device's Spin axis to the
+       device's Roll axis depending on the orientation of the world's Up axis
+       relative to the screen. */
+    //phi = sbadjust * rsens * reverse * fval;  /* spin the knob, y axis */
+    phi = sbadjust * rsens * (yvec * fval + zvec * fval);
q1 = cos(phi);
q1 = q1 = 0.0;
q1 = sin(phi);
q1 = cos(phi);
q1 = q1 = 0.0;
q1 = sin(phi);