diff options
Diffstat (limited to 'src/others/mimesh/trackball.h')
-rw-r--r-- | src/others/mimesh/trackball.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/others/mimesh/trackball.h b/src/others/mimesh/trackball.h new file mode 100644 index 0000000..b9fa830 --- /dev/null +++ b/src/others/mimesh/trackball.h | |||
@@ -0,0 +1,80 @@ | |||
1 | /* | ||
2 | * (c) Copyright 1993, 1994, Silicon Graphics, Inc. | ||
3 | * ALL RIGHTS RESERVED | ||
4 | * Permission to use, copy, modify, and distribute this software for | ||
5 | * any purpose and without fee is hereby granted, provided that the above | ||
6 | * copyright notice appear in all copies and that both the copyright notice | ||
7 | * and this permission notice appear in supporting documentation, and that | ||
8 | * the name of Silicon Graphics, Inc. not be used in advertising | ||
9 | * or publicity pertaining to distribution of the software without specific, | ||
10 | * written prior permission. | ||
11 | * | ||
12 | * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" | ||
13 | * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, | ||
14 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR | ||
15 | * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON | ||
16 | * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, | ||
17 | * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY | ||
18 | * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, | ||
19 | * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF | ||
20 | * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN | ||
21 | * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON | ||
22 | * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE | ||
23 | * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. | ||
24 | * | ||
25 | * US Government Users Restricted Rights | ||
26 | * Use, duplication, or disclosure by the Government is subject to | ||
27 | * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph | ||
28 | * (c)(1)(ii) of the Rights in Technical Data and Computer Software | ||
29 | * clause at DFARS 252.227-7013 and/or in similar or successor | ||
30 | * clauses in the FAR or the DOD or NASA FAR Supplement. | ||
31 | * Unpublished-- rights reserved under the copyright laws of the | ||
32 | * United States. Contractor/manufacturer is Silicon Graphics, | ||
33 | * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311. | ||
34 | * | ||
35 | * OpenGL(TM) is a trademark of Silicon Graphics, Inc. | ||
36 | */ | ||
37 | /* | ||
38 | * trackball.h | ||
39 | * A virtual trackball implementation | ||
40 | * Written by Gavin Bell for Silicon Graphics, November 1988. | ||
41 | */ | ||
42 | |||
43 | #include <g3d/types.h> | ||
44 | |||
45 | /* | ||
46 | * Pass the x and y coordinates of the last and current positions of | ||
47 | * the mouse, scaled so they are from (-1.0 ... 1.0). | ||
48 | * | ||
49 | * The resulting rotation is returned as a quaternion rotation in the | ||
50 | * first paramater. | ||
51 | */ | ||
52 | void | ||
53 | trackball(G3DFloat q[4], G3DFloat p1x, G3DFloat p1y, G3DFloat p2x, G3DFloat p2y); | ||
54 | |||
55 | /* | ||
56 | * Given two quaternions, add them together to get a third quaternion. | ||
57 | * Adding quaternions to get a compound rotation is analagous to adding | ||
58 | * translations to get a compound translation. When incrementally | ||
59 | * adding rotations, the first argument here should be the new | ||
60 | * rotation, the second and third the total rotation (which will be | ||
61 | * over-written with the resulting new total rotation). | ||
62 | */ | ||
63 | void | ||
64 | add_quats(G3DFloat *q1, G3DFloat *q2, G3DFloat *dest); | ||
65 | |||
66 | /* | ||
67 | * A useful function, builds a rotation matrix in Matrix based on | ||
68 | * given quaternion. | ||
69 | */ | ||
70 | void | ||
71 | build_rotmatrix(G3DFloat m[4][4], G3DFloat q[4]); | ||
72 | |||
73 | /* | ||
74 | * This function computes a quaternion based on an axis (defined by | ||
75 | * the given vector) and an angle about which to rotate. The angle is | ||
76 | * expressed in radians. The result is put into the third argument. | ||
77 | */ | ||
78 | void | ||
79 | axis_to_quat(G3DFloat a[3], G3DFloat phi, G3DFloat q[4]); | ||
80 | |||