2 Copyright (C) 1996-1997 Id Software, Inc.
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU General Public License
6 as published by the Free Software Foundation; either version 2
7 of the License, or (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13 See the GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 typedef vec_t vec3_t
[3];
25 typedef vec_t vec5_t
[5];
29 typedef int fixed16_t
;
31 //#ifdef PSP_SOFTWARE_VIDEO
34 #define M_PI 3.14159265358979323846 // matches value in gcc v2 math.h
37 #define M_PI_DIV_180 (M_PI / 180.0) //johnfitz
38 //#define DEG2RAD( a ) ( a * M_PI ) / 180.0F
39 #define DEG2RAD( a ) ( (a) * M_PI_DIV_180 ) //johnfitz
44 #define M_PI = GU_PI // matches value in gcc v2 math.h
47 #define M_PI_DIV_180 (M_PI / 180.0) //johnfitz
48 //#define DEG2RAD( a ) ( a * M_PI ) / 180.0F
49 #define DEG2RAD( a ) ( (a) * M_PI_DIV_180 ) //johnfitz
54 extern vec3_t vec3_origin
;
57 #define CLAMP(min, x, max) ((x) < (min) ? (min) : (x) > (max) ? (max) : (x)) //johnfitz
59 #define IS_NAN(x) (((*(int *)&x)&nanmask)==nanmask)
61 #define DotProduct(x,y) (x[0]*y[0]+x[1]*y[1]+x[2]*y[2])
62 #define VectorSubtract(a,b,c) {(c)[0]=(a)[0]-(b)[0];(c)[1]=(a)[1]-(b)[1];(c)[2]=(a)[2]-(b)[2];}
63 #define VectorAdd(a,b,c) {c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];}
64 #define VectorCopy(a,b) {b[0]=a[0];b[1]=a[1];b[2]=a[2];}
65 #define VectorClear(a) ((a)[0] = (a)[1] = (a)[2] = 0)
67 // MDave -- courtesy of johnfitz, lordhavoc
68 #define VectorNormalizeFast(_v)\
71 _number = DotProduct(_v, _v);\
74 *((long *)&_y) = 0x5f3759df - ((* (long *) &_number) >> 1);\
75 _y = _y * (1.5f - (_number * 0.5f * _y * _y));\
76 VectorScale(_v, _y, _v);\
80 void VectorMA (vec3_t veca
, float scale
, vec3_t vecb
, vec3_t vecc
);
82 vec_t
_DotProduct (vec3_t v1
, vec3_t v2
);
83 void _VectorSubtract (vec3_t veca
, vec3_t vecb
, vec3_t out
);
84 void _VectorAdd (vec3_t veca
, vec3_t vecb
, vec3_t out
);
85 void _VectorCopy (vec3_t in
, vec3_t out
);
87 int VectorCompare (vec3_t v1
, vec3_t v2
);
88 vec_t
Length (vec3_t v
);
89 void CrossProduct (vec3_t v1
, vec3_t v2
, vec3_t cross
);
90 float VectorNormalize (vec3_t v
); // returns vector length
91 void VectorInverse (vec3_t v
);
92 void VectorScale (vec3_t in
, vec_t scale
, vec3_t out
);
95 void R_ConcatRotations (float in1
[3][3], float in2
[3][3], float out
[3][3]);
96 void R_ConcatTransforms (float in1
[3][4], float in2
[3][4], float out
[3][4]);
98 void FloorDivMod (float numer
, float denom
, int *quotient
,
100 fixed16_t
Invert24To16(fixed16_t val
);
101 int GreatestCommonDivisor (int i1
, int i2
);
103 void vectoangles (vec3_t vec
, vec3_t ang
);
104 void AngleVectors (vec3_t angles
, vec3_t forward
, vec3_t right
, vec3_t up
);
105 int BoxOnPlaneSide (vec3_t emins
, vec3_t emaxs
, struct mplane_s
*plane
);
106 float anglemod(float a
);
110 #define BOX_ON_PLANE_SIDE(emins, emaxs, p) \
113 ((p)->dist <= (emins)[(p)->type])? \
117 ((p)->dist >= (emaxs)[(p)->type])?\
124 BoxOnPlaneSide( (emins), (emaxs), (p)))
126 // Prototypes added by PM.
127 void RotatePointAroundVector( vec3_t dst
, const vec3_t dir
, const vec3_t point
, float degrees
);
128 void VectorVectors (vec3_t forward
, vec3_t right
, vec3_t up
);