- GLfloat x, y, z;
-
- if (do_wander)
- {
- static int frame = 0;
-
-# define SINOID(SCALE,SIZE) \
- ((((1 + sin((frame * (SCALE)) / 2 * M_PI)) / 2.0) * (SIZE)) - (SIZE)/2)
-
- x = SINOID(0.031, 9.0);
- y = SINOID(0.023, 9.0);
- z = SINOID(0.017, 9.0);
- frame++;
- glTranslatef(x, y, z);
- }
-
- if (mc->spin_x || mc->spin_y || mc->spin_z)
- {
- x = mc->rotx;
- y = mc->roty;
- z = mc->rotz;
- if (x < 0) x = 1 - (x + 1);
- if (y < 0) y = 1 - (y + 1);
- if (z < 0) z = 1 - (z + 1);
-
- if (mc->spin_x) glRotatef(x * 360, 1.0, 0.0, 0.0);
- if (mc->spin_y) glRotatef(y * 360, 0.0, 1.0, 0.0);
- if (mc->spin_z) glRotatef(z * 360, 0.0, 0.0, 1.0);
-
- rotate(&mc->rotx, &mc->dx, &mc->ddx, mc->d_max);
- rotate(&mc->roty, &mc->dy, &mc->ddy, mc->d_max);
- rotate(&mc->rotz, &mc->dz, &mc->ddz, mc->d_max);
- }
+ double x, y, z;
+ get_position (mc->rot, &x, &y, &z, !mc->button_down_p);
+ glTranslatef((x - 0.5) * 9,
+ (y - 0.5) * 9,
+ (z - 0.5) * 9);
+
+ gltrackball_rotate (mc->trackball);
+
+ get_rotation (mc->rot, &x, &y, &z, !mc->button_down_p);
+ glRotatef (x * 360, 1.0, 0.0, 0.0);
+ glRotatef (y * 360, 0.0, 1.0, 0.0);
+ glRotatef (z * 360, 0.0, 0.0, 1.0);