Doxygen Source Code Documentation
SUMA_trackball.c File Reference
#include "SUMA_suma.h"Go to the source code of this file.
Defines | |
| #define | TRACKBALLSIZE (1) |
| #define | RENORMCOUNT 97 |
Functions | |
| float | tb_project_to_sphere (float, float, float) |
| void | normalize_quat (float[4]) |
| void | vzero (float *v) |
| void | vset (float *v, float x, float y, float z) |
| void | vsub (const float *src1, const float *src2, float *dst) |
| void | vcopy (const float *v1, float *v2) |
| void | vcross (const float *v1, const float *v2, float *cross) |
| float | vlength (const float *v) |
| void | vscale (float *v, float div) |
| void | vnormal (float *v) |
| float | vdot (const float *v1, const float *v2) |
| void | vadd (const float *src1, const float *src2, float *dst) |
| void | trackball (float q[4], float p1x, float p1y, float p2x, float p2y) |
| void | trackball_Phi (float q[4], float p1x, float p1y, float p2x, float p2y, float phi) |
| void | axis_to_quat (float a[3], float phi, float q[4]) |
| void | add_quats (float q1[4], float q2[4], float dest[4]) |
| void | SUMA_build_rotmatrix (GLfloat m[4][4], float q[4]) |
Variables | |
| SUMA_CommonFields * | SUMAg_CF |
Define Documentation
|
|
Definition at line 207 of file SUMA_trackball.c. Referenced by add_quats(). |
|
|
Definition at line 16 of file SUMA_trackball.c. Referenced by trackball(), and trackball_Phi(). |
Function Documentation
|
||||||||||||||||
|
Definition at line 210 of file SUMA_trackball.c. References normalize_quat(), RENORMCOUNT, vadd(), vcopy(), vcross(), vdot(), and vscale().
00211 {
00212 static int count = 0;
00213 float t1[4], t2[4], t3[4];
00214 float tf[4];
00215
00216 vcopy(q1, t1);
00217 vscale(t1, q2[3]);
00218
00219 vcopy(q2, t2);
00220 vscale(t2, q1[3]);
00221
00222 vcross(q2, q1, t3);
00223 vadd(t1, t2, tf);
00224 vadd(t3, tf, tf);
00225 tf[3] = q1[3] * q2[3] - vdot(q1, q2);
00226
00227 dest[0] = tf[0];
00228 dest[1] = tf[1];
00229 dest[2] = tf[2];
00230 dest[3] = tf[3];
00231
00232 if (++count > RENORMCOUNT) {
00233 count = 0;
00234 normalize_quat(dest);
00235 }
00236 }
|
|
||||||||||||||||
|
Definition at line 174 of file SUMA_trackball.c. References a, q, vcopy(), vnormal(), and vscale(). Referenced by SUMA_input(), trackball(), and trackball_Phi().
|
|
|
Definition at line 242 of file SUMA_trackball.c. Referenced by add_quats().
|
|
||||||||||||
|
Definition at line 254 of file SUMA_trackball.c. References LocalHead, q, SUMA_Boolean, SUMA_ENTRY, and SUMA_RETURNe.
00255 {
00256 static char FuncName[]={"SUMA_build_rotmatrix"};
00257 SUMA_Boolean LocalHead = NOPE;
00258
00259 SUMA_ENTRY;
00260 m[0][0] = 1.0 - 2.0 * (q[1] * q[1] + q[2] * q[2]);
00261 m[0][1] = 2.0 * (q[0] * q[1] - q[2] * q[3]);
00262 m[0][2] = 2.0 * (q[2] * q[0] + q[1] * q[3]);
00263 m[0][3] = 0.0;
00264
00265 m[1][0] = 2.0 * (q[0] * q[1] + q[2] * q[3]);
00266 m[1][1] = 1.0 - 2.0 * (q[2] * q[2] + q[0] * q[0]);
00267 m[1][2] = 2.0 * (q[1] * q[2] - q[0] * q[3]);
00268 m[1][3] = 0.0;
00269
00270 m[2][0] = 2.0 * (q[2] * q[0] - q[1] * q[3]);
00271 m[2][1] = 2.0 * (q[1] * q[2] + q[0] * q[3]);
00272 m[2][2] = 1.0 - 2.0 * (q[1] * q[1] + q[0] * q[0]);
00273 m[2][3] = 0.0;
00274
00275 m[3][0] = 0.0;
00276 m[3][1] = 0.0;
00277 m[3][2] = 0.0;
00278 m[3][3] = 1.0;
00279
00280 SUMA_RETURNe;
00281 }
|
|
||||||||||||||||
|
Definition at line 186 of file SUMA_trackball.c. References r. Referenced by trackball(), and trackball_Phi().
|
|
||||||||||||||||||||||||
|
functions defined in SUMA_trackball.c Definition at line 99 of file SUMA_trackball.c. References a, axis_to_quat(), q, tb_project_to_sphere(), TRACKBALLSIZE, vcross(), vlength(), vset(), vsub(), and vzero(). Referenced by SUMA_input().
00100 {
00101 float a[3]; /* Axis of rotation. */
00102 float phi; /* How much to rotate about axis. */
00103 float p1[3], p2[3], d[3];
00104 float t;
00105
00106 if (p1x == p2x && p1y == p2y) {
00107 /* Zero rotation */
00108 vzero(q);
00109 q[3] = 1.0;
00110 return;
00111 }
00112 /* First, figure out z-coordinates for projection of P1 and
00113 P2 to deformed sphere. */
00114 vset(p1, p1x, p1y, tb_project_to_sphere(TRACKBALLSIZE, p1x, p1y));
00115 vset(p2, p2x, p2y, tb_project_to_sphere(TRACKBALLSIZE, p2x, p2y));
00116
00117 /* Now, we want the cross product of P1 and P2. */
00118 vcross(p2, p1, a);
00119 /* Figure out how much to rotate around that axis. */
00120 vsub(p1, p2, d);
00121 t = vlength(d) / (2.0 * TRACKBALLSIZE);
00122
00123 /* Avoid problems with out-of-control values. */
00124 if (t > 1.0)
00125 t = 1.0;
00126 if (t < -1.0)
00127 t = -1.0;
00128 phi = 2.0 * asin(t);
00129 axis_to_quat(a, phi, q);
00130 }
|
|
||||||||||||||||||||||||||||
|
A modification/hack of trackball function to control the rotation angle directement Definition at line 136 of file SUMA_trackball.c. References a, axis_to_quat(), q, tb_project_to_sphere(), TRACKBALLSIZE, vcross(), vlength(), vset(), vsub(), and vzero(). Referenced by SUMA_input().
00137 {
00138 float a[3]; /* Axis of rotation. */
00139 float p1[3], p2[3], d[3];
00140 float t;
00141
00142 if (p1x == p2x && p1y == p2y) {
00143 /* Zero rotation */
00144 vzero(q);
00145 q[3] = 1.0;
00146 return;
00147 }
00148 /* First, figure out z-coordinates for projection of P1 and
00149 P2 to deformed sphere. */
00150 vset(p1, p1x, p1y, tb_project_to_sphere(TRACKBALLSIZE, p1x, p1y));
00151 vset(p2, p2x, p2y, tb_project_to_sphere(TRACKBALLSIZE, p2x, p2y));
00152
00153 /* Now, we want the cross product of P1 and P2. */
00154 vcross(p2, p1, a);
00155 /* Figure out how much to rotate around that axis. */
00156 vsub(p1, p2, d);
00157 t = vlength(d) / (2.0 * TRACKBALLSIZE);
00158
00159 /* Avoid problems with out-of-control values. */
00160 if (t > 1.0) {
00161 t = 1.0;
00162 phi = 2.0 * asin(t);
00163 }
00164 if (t < -1.0) {
00165 t = -1.0;
00166 phi = 2.0 * asin(t);
00167 }
00168
00169 axis_to_quat(a, phi, q);
00170 }
|
|
||||||||||||||||
|
Definition at line 91 of file SUMA_trackball.c. Referenced by add_quats().
00092 {
00093 dst[0] = src1[0] + src2[0];
00094 dst[1] = src1[1] + src2[1];
00095 dst[2] = src1[2] + src2[2];
00096 }
|
|
||||||||||||
|
Definition at line 46 of file SUMA_trackball.c. Referenced by add_quats(), axis_to_quat(), and vcross().
|
|
||||||||||||||||
|
Definition at line 54 of file SUMA_trackball.c. Referenced by add_quats(), trackball(), and trackball_Phi().
|
|
||||||||||||
|
Definition at line 85 of file SUMA_trackball.c. References v1. Referenced by add_quats().
|
|
|
Definition at line 65 of file SUMA_trackball.c. References v. Referenced by trackball(), trackball_Phi(), and vnormal().
|
|
|
Definition at line 79 of file SUMA_trackball.c. References v, vlength(), and vscale(). Referenced by axis_to_quat().
|
|
||||||||||||
|
Definition at line 71 of file SUMA_trackball.c. References v. Referenced by add_quats(), axis_to_quat(), and vnormal().
|
|
||||||||||||||||||||
|
Definition at line 30 of file SUMA_trackball.c. References v. Referenced by trackball(), and trackball_Phi().
|
|
||||||||||||||||
|
Definition at line 38 of file SUMA_trackball.c. Referenced by trackball(), and trackball_Phi().
00039 {
00040 dst[0] = src1[0] - src2[0];
00041 dst[1] = src1[1] - src2[1];
00042 dst[2] = src1[2] - src2[2];
00043 }
|
|
|
Definition at line 22 of file SUMA_trackball.c. References v. Referenced by trackball(), and trackball_Phi().
|
Variable Documentation
|
|
Global pointer to structure containing info common to all viewers Definition at line 3 of file SUMA_trackball.c. |