home *** CD-ROM | disk | FTP | other *** search
/ Amiga ACS 1998 #6 / amigaacscoverdisc1998-061998.iso / games / descent / source / lib / vector1.h < prev    next >
C/C++ Source or Header  |  1998-06-08  |  2KB  |  69 lines

  1. /*
  2. THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
  3. SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
  4. END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
  5. ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
  6. IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
  7. SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
  8. FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
  9. CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
  10. AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
  11. COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
  12. */
  13. /* vector.h */
  14. /* Created 12/14/94 */
  15. /* John Schultz */
  16.  
  17. #ifndef VECTOR_H
  18. #define VECTOR_H
  19.  
  20. typedef struct {coord x,y;} vec2;
  21. typedef struct {coord x,y,z;} vec3;
  22. typedef struct {coord x,y,z,w;} vec4;
  23. typedef struct {vec3 x,y,z;} matrix33;
  24. typedef struct {matrix33 m; vec3 w;} matrix34;
  25. typedef struct {vec4 x,y,z,w;} matrix44;
  26.  
  27. #define SETVEC(v,a,b,c) (v).x=a;(v).y=b;(v).z=c
  28. #define VZERO(a) (a).x=(a).y=(a).z=0
  29. #define NEGVEC(a)    (a).x=-(a).x;(a).y=-(a).y;(a).z=-(a).z
  30. #define NEGVECN(a,b) (a).x=-(b).x;(a).y=-(b).y;(a).z=-(b).z
  31.  
  32. #define ADDVEC(a,b,c) (a).x=(b).x+(c).x;(a).y=(b).y+(c).y;(a).z=(b).z+(c).z
  33. #define INCVEC(a,b) (a).x+=(b).x;(a).y+=(b).y;(a).z+=(b).z;
  34. #define SUBVEC(a,b,c) (a).x=(b).x-(c).x;(a).y=(b).y-(c).y;(a).z=(b).z-(c).z
  35. #define DECVEC(a,b) (a).x-=(b).x;(a).y-=(b).y;(a).z-=(b).z
  36. #define DOT2(a,b) (MUL((a).x,(b).x)+MUL((a).y,(b).y))
  37. #define DOT3(a,b) (MUL((a).x,(b).x)+MUL((a).y,(b).y)+MUL((a).z,(b).z))
  38. #define DOT4(a,b) (MUL((a).x,(b).x)+MUL((a).y,(b).y)+MUL((a).z,(b).z)+MUL((a).w,(b).w))
  39.  
  40. coord normalize2(vec2 * v);
  41.  
  42. coord normalize3(vec3 * v);
  43.  
  44. //*** Matrix/matrix, matrix/vector routines ***
  45.  
  46. void matrix33unitize(matrix33 * m);
  47.  
  48. void rotate33(vec3 * out,matrix33 * m,vec3 * in);
  49.  
  50. void rotate33rev(vec3 * out,matrix33 * m,vec3 * in);
  51.  
  52. void rotate34(vec3 * out,matrix34 * m,vec3 * in);
  53.  
  54. void rotate34rev(vec3 * out,matrix34 * m,vec3 * in);
  55.  
  56. void matrixMul33(matrix33 * out,matrix33 * a,matrix33 * b);
  57.  
  58. void matrixMul34(matrix34 * out,matrix34 * a,matrix34 * b);
  59.  
  60. void rotate44(vec4 * out,matrix44 * m,vec4 * in);
  61.  
  62. void matrixMul44(matrix44 * out,matrix44 * a,matrix44 * b);
  63.  
  64. void matrix33Axis(matrix33 * m,vec3 * axis,coord angle);
  65.  
  66. #endif
  67.  
  68. /* vector.h */
  69.