From 071ce2fb0b6155a5b3139fb55a928401b549ab66 Mon Sep 17 00:00:00 2001 From: cnlohr Date: Wed, 14 Dec 2016 22:36:47 -0500 Subject: got a little further... need to switch to a more procedural approach. --- tools/planetest/linmath.c | 130 +++++++++++++++++++++++----------------------- 1 file changed, 65 insertions(+), 65 deletions(-) (limited to 'tools/planetest/linmath.c') diff --git a/tools/planetest/linmath.c b/tools/planetest/linmath.c index dec8c70..88643b4 100644 --- a/tools/planetest/linmath.c +++ b/tools/planetest/linmath.c @@ -3,48 +3,48 @@ #include "linmath.h" #include -void cross3d( float * out, const float * a, const float * b ) +void cross3d( FLT * out, const FLT * a, const FLT * b ) { out[0] = a[1]*b[2] - a[2]*b[1]; out[1] = a[2]*b[0] - a[0]*b[2]; out[2] = a[0]*b[1] - a[1]*b[0]; } -void sub3d( float * out, const float * a, const float * b ) +void sub3d( FLT * out, const FLT * a, const FLT * b ) { out[0] = a[0] - b[0]; out[1] = a[1] - b[1]; out[2] = a[2] - b[2]; } -void add3d( float * out, const float * a, const float * b ) +void add3d( FLT * out, const FLT * a, const FLT * b ) { out[0] = a[0] + b[0]; out[1] = a[1] + b[1]; out[2] = a[2] + b[2]; } -void scale3d( float * out, const float * a, float scalar ) +void scale3d( FLT * out, const FLT * a, FLT scalar ) { out[0] = a[0] * scalar; out[1] = a[1] * scalar; out[2] = a[2] * scalar; } -void normalize3d( float * out, const float * in ) +void normalize3d( FLT * out, const FLT * in ) { - float r = 1./sqrtf( in[0] * in[0] + in[1] * in[1] + in[2] * in[2] ); + FLT r = 1./sqrtf( in[0] * in[0] + in[1] * in[1] + in[2] * in[2] ); out[0] = in[0] * r; out[1] = in[1] * r; out[2] = in[2] * r; } -float dot3d( const float * a, const float * b ) +FLT dot3d( const FLT * a, const FLT * b ) { return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; } -int compare3d( const float * a, const float * b, float epsilon ) +int compare3d( const FLT * a, const FLT * b, FLT epsilon ) { if( !a || !b ) return 0; if( a[2] - b[2] > epsilon ) return 1; @@ -56,7 +56,7 @@ int compare3d( const float * a, const float * b, float epsilon ) return 0; } -void copy3d( float * out, const float * in ) +void copy3d( FLT * out, const FLT * in ) { out[0] = in[0]; out[1] = in[1]; @@ -72,12 +72,12 @@ void copy3d( float * out, const float * in ) -void quatsetnone( float * q ) +void quatsetnone( FLT * q ) { q[0] = 0; q[1] = 0; q[2] = 0; q[3] = 1; } -void quatcopy( float * qout, const float * qin ) +void quatcopy( FLT * qout, const FLT * qin ) { qout[0] = qin[0]; qout[1] = qin[1]; @@ -85,18 +85,18 @@ void quatcopy( float * qout, const float * qin ) qout[3] = qin[3]; } -void quatfromeuler( float * q, const float * euler ) +void quatfromeuler( FLT * q, const FLT * euler ) { - float X = euler[0]/2.0f; //roll - float Y = euler[1]/2.0f; //pitch - float Z = euler[2]/2.0f; //yaw + FLT X = euler[0]/2.0f; //roll + FLT Y = euler[1]/2.0f; //pitch + FLT Z = euler[2]/2.0f; //yaw - float cx = cosf(X); - float sx = sinf(X); - float cy = cosf(Y); - float sy = sinf(Y); - float cz = cosf(Z); - float sz = sinf(Z); + FLT cx = cosf(X); + FLT sx = sinf(X); + FLT cy = cosf(Y); + FLT sy = sinf(Y); + FLT cz = cosf(Z); + FLT sz = sinf(Z); //Correct according to //http://en.wikipedia.org/wiki/Conversion_between_MQuaternions_and_Euler_angles @@ -107,7 +107,7 @@ void quatfromeuler( float * q, const float * euler ) quatnormalize( q, q ); } -void quattoeuler( float * euler, const float * q ) +void quattoeuler( FLT * euler, const FLT * q ) { //According to http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles (Oct 26, 2009) euler[0] = atan2( 2 * (q[0]*q[1] + q[2]*q[3]), 1 - 2 * (q[1]*q[1] + q[2]*q[2] ) ); @@ -115,12 +115,12 @@ void quattoeuler( float * euler, const float * q ) euler[2] = atan2( 2 * (q[0]*q[3] + q[1]*q[2]), 1 - 2 * (q[2]*q[2] + q[3]*q[3] ) ); } -void quatfromaxisangle( float * q, const float * axis, float radians ) +void quatfromaxisangle( FLT * q, const FLT * axis, FLT radians ) { - float v[3]; + FLT v[3]; normalize3d( v, axis ); - float sn = sin(radians/2.0f); + FLT sn = sin(radians/2.0f); q[0] = cos(radians/2.0f); q[1] = sn * v[0]; q[2] = sn * v[1]; @@ -129,40 +129,40 @@ void quatfromaxisangle( float * q, const float * axis, float radians ) quatnormalize( q, q ); } -float quatmagnitude( const float * q ) +FLT quatmagnitude( const FLT * q ) { return sqrt((q[0]*q[0])+(q[1]*q[1])+(q[2]*q[2])+(q[3]*q[3])); } -float quatinvsqmagnitude( const float * q ) +FLT quatinvsqmagnitude( const FLT * q ) { return 1./((q[0]*q[0])+(q[1]*q[1])+(q[2]*q[2])+(q[3]*q[3])); } -void quatnormalize( float * qout, const float * qin ) +void quatnormalize( FLT * qout, const FLT * qin ) { - float imag = quatinvsqmagnitude( qin ); + FLT imag = quatinvsqmagnitude( qin ); quatscale( qout, qin, imag ); } -void quattomatrix( float * matrix44, const float * qin ) +void quattomatrix( FLT * matrix44, const FLT * qin ) { - float q[4]; + FLT q[4]; quatnormalize( q, qin ); //Reduced calulation for speed - float xx = 2*q[0]*q[0]; - float xy = 2*q[0]*q[1]; - float xz = 2*q[0]*q[2]; - float xw = 2*q[0]*q[3]; + FLT xx = 2*q[0]*q[0]; + FLT xy = 2*q[0]*q[1]; + FLT xz = 2*q[0]*q[2]; + FLT xw = 2*q[0]*q[3]; - float yy = 2*q[1]*q[1]; - float yz = 2*q[1]*q[2]; - float yw = 2*q[1]*q[3]; + FLT yy = 2*q[1]*q[1]; + FLT yz = 2*q[1]*q[2]; + FLT yw = 2*q[1]*q[3]; - float zz = 2*q[2]*q[2]; - float zw = 2*q[2]*q[3]; + FLT zz = 2*q[2]*q[2]; + FLT zw = 2*q[2]*q[3]; //opengl major matrix44[0] = 1-yy-zz; @@ -186,7 +186,7 @@ void quattomatrix( float * matrix44, const float * qin ) matrix44[15] = 1; } -void quatgetconjugate( float * qout, const float * qin ) +void quatgetconjugate( FLT * qout, const FLT * qin ) { qout[0] = qin[0]; qout[1] = -qin[1]; @@ -194,14 +194,14 @@ void quatgetconjugate( float * qout, const float * qin ) qout[3] = -qin[3]; } -void quatgetreciprocal( float * qout, const float * qin ) +void quatgetreciprocal( FLT * qout, const FLT * qin ) { - float m = quatinvsqmagnitude(qin); + FLT m = quatinvsqmagnitude(qin); quatgetconjugate( qout, qin ); quatscale( qout, qout, m ); } -void quatsub( float * qout, const float * a, const float * b ) +void quatsub( FLT * qout, const FLT * a, const FLT * b ) { qout[0] = a[0] - b[0]; qout[1] = a[1] - b[1]; @@ -209,7 +209,7 @@ void quatsub( float * qout, const float * a, const float * b ) qout[3] = a[3] - b[3]; } -void quatadd( float * qout, const float * a, const float * b ) +void quatadd( FLT * qout, const FLT * a, const FLT * b ) { qout[0] = a[0] + b[0]; qout[1] = a[1] + b[1]; @@ -217,10 +217,10 @@ void quatadd( float * qout, const float * a, const float * b ) qout[3] = a[3] + b[3]; } -void quatrotateabout( float * qout, const float * a, const float * b ) +void quatrotateabout( FLT * qout, const FLT * a, const FLT * b ) { - float q1[4]; - float q2[4]; + FLT q1[4]; + FLT q2[4]; quatnormalize( q1, a ); quatnormalize( q2, b ); @@ -231,7 +231,7 @@ void quatrotateabout( float * qout, const float * a, const float * b ) qout[3] = (q1[0]*q2[3])+(q1[1]*q2[2])-(q1[2]*q2[1])+(q1[3]*q2[0]); } -void quatscale( float * qout, const float * qin, float s ) +void quatscale( FLT * qout, const FLT * qin, FLT s ) { qout[0] = qin[0] * s; qout[1] = qin[1] * s; @@ -240,19 +240,19 @@ void quatscale( float * qout, const float * qin, float s ) } -float quatinnerproduct( const float * qa, const float * qb ) +FLT quatinnerproduct( const FLT * qa, const FLT * qb ) { return (qa[0]*qb[0])+(qa[1]*qb[1])+(qa[2]*qb[2])+(qa[3]*qb[3]); } -void quatouterproduct( float * outvec3, float * qa, float * qb ) +void quatouterproduct( FLT * outvec3, FLT * qa, FLT * qb ) { outvec3[0] = (qa[0]*qb[1])-(qa[1]*qb[0])-(qa[2]*qb[3])+(qa[3]*qb[2]); outvec3[1] = (qa[0]*qb[2])+(qa[1]*qb[3])-(qa[2]*qb[0])-(qa[3]*qb[1]); outvec3[2] = (qa[0]*qb[3])-(qa[1]*qb[2])+(qa[2]*qb[1])-(qa[3]*qb[0]); } -void quatevenproduct( float * q, float * qa, float * qb ) +void quatevenproduct( FLT * q, FLT * qa, FLT * qb ) { q[0] = (qa[0]*qb[0])-(qa[1]*qb[1])-(qa[2]*qb[2])-(qa[3]*qb[3]); q[1] = (qa[0]*qb[1])+(qa[1]*qb[0]); @@ -260,21 +260,21 @@ void quatevenproduct( float * q, float * qa, float * qb ) q[3] = (qa[0]*qb[3])+(qa[3]*qb[0]); } -void quatoddproduct( float * outvec3, float * qa, float * qb ) +void quatoddproduct( FLT * outvec3, FLT * qa, FLT * qb ) { outvec3[0] = (qa[2]*qb[3])-(qa[3]*qb[2]); outvec3[1] = (qa[3]*qb[1])-(qa[1]*qb[3]); outvec3[2] = (qa[1]*qb[2])-(qa[2]*qb[1]); } -void quatslerp( float * q, const float * qa, const float * qb, float t ) +void quatslerp( FLT * q, const FLT * qa, const FLT * qb, FLT t ) { - float an[4]; - float bn[4]; + FLT an[4]; + FLT bn[4]; quatnormalize( an, qa ); quatnormalize( bn, qb ); - float cosTheta = quatinnerproduct(an,bn); - float sinTheta; + FLT cosTheta = quatinnerproduct(an,bn); + FLT sinTheta; //Careful: If cosTheta is exactly one, or even if it's infinitesimally over, it'll // cause SQRT to produce not a number, and screw everything up. @@ -283,7 +283,7 @@ void quatslerp( float * q, const float * qa, const float * qb, float t ) else sinTheta = sqrt(1 - (cosTheta*cosTheta)); - float Theta = acos(cosTheta); //Theta is half the angle between the 2 MQuaternions + FLT Theta = acos(cosTheta); //Theta is half the angle between the 2 MQuaternions if(fabs(Theta) < DEFAULT_EPSILON ) quatcopy( q, qa ); @@ -294,8 +294,8 @@ void quatslerp( float * q, const float * qa, const float * qb, float t ) } else { - float aside[4]; - float bside[4]; + FLT aside[4]; + FLT bside[4]; quatscale( bside, qb, sin( t * Theta ) ); quatscale( aside, qa, sin((1-t)*Theta) ); quatadd( q, aside, bside ); @@ -303,11 +303,11 @@ void quatslerp( float * q, const float * qa, const float * qb, float t ) } } -void quatrotatevector( float * vec3out, const float * quat, const float * vec3in ) +void quatrotatevector( FLT * vec3out, const FLT * quat, const FLT * vec3in ) { - float tquat[4]; - float vquat[4]; - float qrecp[4]; + FLT tquat[4]; + FLT vquat[4]; + FLT qrecp[4]; vquat[0] = 0; vquat[1] = vec3in[0]; vquat[2] = vec3in[1]; -- cgit v1.2.3