deepstone

diff src/vmath.h @ 28:11d14f688485

added clipping
author John Tsiombikas <nuclear@member.fsf.org>
date Sun, 22 Sep 2013 06:38:08 +0300
parents 61d97b17cd2b
children
line diff
     1.1 --- a/src/vmath.h	Sun Sep 22 02:47:46 2013 +0300
     1.2 +++ b/src/vmath.h	Sun Sep 22 06:38:08 2013 +0300
     1.3 @@ -32,48 +32,73 @@
     1.4  	fixed x, y;
     1.5  } vec2x_t;
     1.6  
     1.7 +typedef struct {
     1.8 +	vec3_t origin, dir;
     1.9 +} ray3_t;
    1.10 +
    1.11 +#define vec3_dot(a, b)	((a).x * (b).x + (a).y * (b).y + (a).z * (b).z)
    1.12 +
    1.13 +#define vec2_lerp(res, a, b, t) \
    1.14 +	do { \
    1.15 +		(res).x = (a).x + ((b).x - (a).x) * (t); \
    1.16 +		(res).y = (a).y + ((b).y - (a).y) * (t); \
    1.17 +	} while(0)
    1.18 +
    1.19 +#define vec3_lerp(res, a, b, t) \
    1.20 +	do { \
    1.21 +		(res).x = (a).x + ((b).x - (a).x) * (t); \
    1.22 +		(res).y = (a).y + ((b).y - (a).y) * (t); \
    1.23 +		(res).z = (a).z + ((b).z - (a).z) * (t); \
    1.24 +	} while(0)
    1.25 +
    1.26 +#define ray3_point(res, ray, t) \
    1.27 +	do { \
    1.28 +		(res).x = (ray).origin.x + (ray).dir.x * (t); \
    1.29 +		(res).y = (ray).origin.y + (ray).dir.y * (t); \
    1.30 +		(res).z = (ray).origin.z + (ray).dir.z * (t); \
    1.31 +	} while(0)
    1.32  
    1.33  #define vec2_to_fixed2(v, f) \
    1.34  	do { \
    1.35 -		f.x = fixedf(v.x); \
    1.36 -		f.y = fixedf(v.y); \
    1.37 +		(f).x = fixedf((v).x); \
    1.38 +		(f).y = fixedf((v).y); \
    1.39  	} while(0)
    1.40  
    1.41  #define vec3_to_fixed3(v, f) \
    1.42  	do { \
    1.43 -		f.x = fixedf(v.x); \
    1.44 -		f.y = fixedf(v.y); \
    1.45 -		f.z = fixedf(v.z); \
    1.46 +		(f).x = fixedf((v).x); \
    1.47 +		(f).y = fixedf((v).y); \
    1.48 +		(f).z = fixedf((v).z); \
    1.49  	} while(0)
    1.50  
    1.51  #define vec4_to_fixed4(v, f) \
    1.52  	do { \
    1.53 -		f.x = fixedf(v.x); \
    1.54 -		f.y = fixedf(v.y); \
    1.55 -		f.z = fixedf(v.z); \
    1.56 -		f.w = fixedf(v.w); \
    1.57 +		(f).x = fixedf((v).x); \
    1.58 +		(f).y = fixedf((v).y); \
    1.59 +		(f).z = fixedf((v).z); \
    1.60 +		(f).w = fixedf((v).w); \
    1.61  	} while(0)
    1.62  
    1.63  
    1.64  #define fixed2_to_vec2(f, v) \
    1.65  	do { \
    1.66 -		v.x = fixed_float(f.x); \
    1.67 -		v.y = fixed_float(f.y); \
    1.68 +		(v).x = fixed_float((f).x); \
    1.69 +		(v).y = fixed_float((f).y); \
    1.70  	} while(0)
    1.71  
    1.72  #define fixed3_to_vec3(f, v) \
    1.73  	do { \
    1.74 -		v.x = fixed_float(f.x); \
    1.75 -		v.y = fixed_float(f.y); \
    1.76 -		v.z = fixed_float(f.z); \
    1.77 +		(v).x = fixed_float((f).x); \
    1.78 +		(v).y = fixed_float((f).y); \
    1.79 +		(v).z = fixed_float((f).z); \
    1.80  	} while(0)
    1.81  
    1.82  #define fixed4_to_vec4(f, v) \
    1.83  	do { \
    1.84 -		v.x = fixed_float(f.x); \
    1.85 -		v.y = fixed_float(f.y); \
    1.86 -		v.z = fixed_float(f.z); \
    1.87 -		v.w = fixed_float(f.w); \
    1.88 +		(v).x = fixed_float((f).x); \
    1.89 +		(v).y = fixed_float((f).y); \
    1.90 +		(v).z = fixed_float((f).z); \
    1.91 +		(v).w = fixed_float((f).w); \
    1.92  	} while(0)
    1.93  
    1.94