|
|
1.1 ! root 1: /* ! 2: Copyright (C) 1996-1997 Id Software, Inc. ! 3: ! 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. ! 8: ! 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. ! 12: ! 13: See the GNU General Public License for more details. ! 14: ! 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. ! 18: ! 19: */ ! 20: // mathlib.h ! 21: ! 22: typedef float vec_t; ! 23: typedef vec_t vec3_t[3]; ! 24: typedef vec_t vec5_t[5]; ! 25: ! 26: typedef int fixed4_t; ! 27: typedef int fixed8_t; ! 28: typedef int fixed16_t; ! 29: ! 30: #ifndef M_PI ! 31: #define M_PI 3.14159265358979323846 // matches value in gcc v2 math.h ! 32: #endif ! 33: ! 34: struct mplane_s; ! 35: ! 36: extern vec3_t vec3_origin; ! 37: extern int nanmask; ! 38: ! 39: #define IS_NAN(x) (((*(int *)&x)&nanmask)==nanmask) ! 40: ! 41: #define DotProduct(x,y) (x[0]*y[0]+x[1]*y[1]+x[2]*y[2]) ! 42: #define VectorSubtract(a,b,c) {c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];} ! 43: #define VectorAdd(a,b,c) {c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];} ! 44: #define VectorCopy(a,b) {b[0]=a[0];b[1]=a[1];b[2]=a[2];} ! 45: ! 46: void VectorMA (vec3_t veca, float scale, vec3_t vecb, vec3_t vecc); ! 47: ! 48: vec_t _DotProduct (vec3_t v1, vec3_t v2); ! 49: void _VectorSubtract (vec3_t veca, vec3_t vecb, vec3_t out); ! 50: void _VectorAdd (vec3_t veca, vec3_t vecb, vec3_t out); ! 51: void _VectorCopy (vec3_t in, vec3_t out); ! 52: ! 53: int VectorCompare (vec3_t v1, vec3_t v2); ! 54: vec_t Length (vec3_t v); ! 55: void CrossProduct (vec3_t v1, vec3_t v2, vec3_t cross); ! 56: float VectorNormalize (vec3_t v); // returns vector length ! 57: void VectorInverse (vec3_t v); ! 58: void VectorScale (vec3_t in, vec_t scale, vec3_t out); ! 59: int Q_log2(int val); ! 60: ! 61: void R_ConcatRotations (float in1[3][3], float in2[3][3], float out[3][3]); ! 62: void R_ConcatTransforms (float in1[3][4], float in2[3][4], float out[3][4]); ! 63: ! 64: void FloorDivMod (double numer, double denom, int *quotient, ! 65: int *rem); ! 66: fixed16_t Invert24To16(fixed16_t val); ! 67: fixed16_t Mul16_30(fixed16_t multiplier, fixed16_t multiplicand); ! 68: int GreatestCommonDivisor (int i1, int i2); ! 69: ! 70: void AngleVectors (vec3_t angles, vec3_t forward, vec3_t right, vec3_t up); ! 71: int BoxOnPlaneSide (vec3_t emins, vec3_t emaxs, struct mplane_s *plane); ! 72: float anglemod(float a); ! 73: ! 74: void RotatePointAroundVector( vec3_t dst, const vec3_t dir, const vec3_t point, float degrees ); ! 75: ! 76: ! 77: #define BOX_ON_PLANE_SIDE(emins, emaxs, p) \ ! 78: (((p)->type < 3)? \ ! 79: ( \ ! 80: ((p)->dist <= (emins)[(p)->type])? \ ! 81: 1 \ ! 82: : \ ! 83: ( \ ! 84: ((p)->dist >= (emaxs)[(p)->type])?\ ! 85: 2 \ ! 86: : \ ! 87: 3 \ ! 88: ) \ ! 89: ) \ ! 90: : \ ! 91: BoxOnPlaneSide( (emins), (emaxs), (p)))
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.