19 memset(
_sensor0, 0, 3 *
sizeof(
float));
20 memset(
_sensor1, 0, 3 *
sizeof(
float));
22 memcpy(
_mapping, mapping, 6 *
sizeof(
int));
26 if (joystick_dev[0] ==
'*')
33 fprintf(stderr,
"vrpn_Tracker_GameTrak: "
34 "Can't open joystick %s\n", joystick_dev);
63 memset(
d_quat, 0,
sizeof(vrpn_float64) * 4);
75 fprintf(stderr,
"GameTrak tracker: can't write message: tossing\n");
87 fprintf(stderr,
"GameTrak tracker: can't write message: tossing\n");
108 vrpn_float64 s1x, s1y, s1z;
109 vrpn_float64 s2x, s2y, s2z;
111 s1x = info.channel[gametrak->
_mapping[0]];
112 s1y = info.channel[gametrak->
_mapping[1]];
113 s1z = info.channel[gametrak->
_mapping[2]];
115 s2x = info.channel[gametrak->
_mapping[3]];
116 s2y = info.channel[gametrak->
_mapping[4]];
117 s2z = info.channel[gametrak->
_mapping[5]];
119 vrpn_float64 coef = (32.5 / 180.0) * Q_PI;
121 vrpn_float64 distance0 = 1.5 * (1 - s1z);
122 vrpn_float64 angleX0 = -s1x * coef;
123 vrpn_float64 angleY0 = -s1y * coef;
125 vrpn_float64 distance1 = 1.5 * (1 - s2z);
126 vrpn_float64 angleX1 = -s2x * coef;
127 vrpn_float64 angleY1 = -s2y * coef;
131 gametrak->
_sensor0[0] = sin(angleX0) * distance0 + 0.065;
132 gametrak->
_sensor0[1] = cos(angleX0) * sin(angleY0) * distance0;
133 gametrak->
_sensor0[2] = cos(angleX0) * cos(angleY0) * distance0;
135 gametrak->
_sensor1[0] = sin(angleX1) * distance1 - 0.065;
136 gametrak->
_sensor1[1] = cos(angleX1) * sin(angleY1) * distance1;
137 gametrak->
_sensor1[2] = cos(angleX1) * cos(angleY1) * distance1;
142 memcpy(&(gametrak->
_timestamp), &(info.msg_time),
sizeof(
struct timeval));