62 #define TRACKBALLSIZE  (0.8)    79 vset(
float *v, 
float x, 
float y, 
float z)
    87 vsub(
const float *src1, 
const float *src2, 
float *dst)
    89     dst[0] = src1[0] - src2[0];
    90     dst[1] = src1[1] - src2[1];
    91     dst[2] = src1[2] - src2[2];
    95 vcopy(
const float *v1, 
float *v2)
    98     for (i = 0 ; i < 3 ; i++)
   107     temp[0] = (v1[1] * v2[2]) - (v1[2] * v2[1]);
   108     temp[1] = (v1[2] * v2[0]) - (v1[0] * v2[2]);
   109     temp[2] = (v1[0] * v2[1]) - (v1[1] * v2[0]);
   116     return sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
   134 vdot(
const float *v1, 
const float *v2)
   136     return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2];
   140 vadd(
const float *src1, 
const float *src2, 
float *dst)
   142     dst[0] = src1[0] + src2[0];
   143     dst[1] = src1[1] + src2[1];
   144     dst[2] = src1[2] + src2[2];
   160 trackball(
float q[4], 
float p1x, 
float p1y, 
float p2x, 
float p2y)
   164     float p1[3], p2[3], d[3];
   167     if (p1x == p2x && p1y == p2y) {
   195     if (t > 1.0) t = 1.0;
   196     if (t < -1.0) t = -1.0;
   224     if (d < r * 0.70710678118654752440) {    
   227         t = r / 1.41421356237309504880;
   244 #define RENORMCOUNT 97   250     float t1[4], t2[4], t3[4];
   262     tf[3] = q1[3] * q2[3] - 
vdot(q1,q2);
   293     mag = (q[0]*q[0] + q[1]*q[1] + q[2]*q[2] + q[3]*q[3]);
   294     for (i = 0; i < 4; i++) q[i] /= mag;
   304     m[0][0] = 1.0 - 2.0 * (q[1] * q[1] + q[2] * q[2]);
   305     m[0][1] = 2.0 * (q[0] * q[1] - q[2] * q[3]);
   306     m[0][2] = 2.0 * (q[2] * q[0] + q[1] * q[3]);
   309     m[1][0] = 2.0 * (q[0] * q[1] + q[2] * q[3]);
   310     m[1][1]= 1.0 - 2.0 * (q[2] * q[2] + q[0] * q[0]);
   311     m[1][2] = 2.0 * (q[1] * q[2] - q[0] * q[3]);
   314     m[2][0] = 2.0 * (q[2] * q[0] - q[1] * q[3]);
   315     m[2][1] = 2.0 * (q[1] * q[2] + q[0] * q[3]);
   316     m[2][2] = 1.0 - 2.0 * (q[1] * q[1] + q[0] * q[0]);
 void vset(float *v, float x, float y, float z)
 
void vadd(const float *src1, const float *src2, float *dst)
 
static void normalize_quat(float [4])
 
void vscale(float *v, float div)
 
void axis_to_quat(float a[3], float phi, float q[4])
 
float vlength(const float *v)
 
void vcopy(const float *v1, float *v2)
 
static float tb_project_to_sphere(float, float, float)
 
void trackball(float q[4], float p1x, float p1y, float p2x, float p2y)
 
void add_quats(float q1[4], float q2[4], float dest[4])
 
__host__ __device__ float3 cross(const float3 &a, const float3 &b)
calculate the cross product between vectors a and b. 
 
float vdot(const float *v1, const float *v2)
 
void build_rotmatrix(float m[4][4], float q[4])
 
void vcross(const float *v1, const float *v2, float *cross)
 
void vsub(const float *src1, const float *src2, float *dst)