home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the 3D Game Programming Gurus / gurus.iso / Articles / TextureMapMania / tmapper.h < prev    next >
C/C++ Source or Header  |  1998-02-05  |  3KB  |  83 lines

  1. // TMAPPER.H - Header file for TMAPPER.CPP, so external programs can link
  2.  
  3. // DEFINES //////////////////////////////////////////////////////////////////
  4.  
  5. // defines for fixed point math
  6. #define FIXP16_SHIFT     16
  7. #define FIXP16_MAG       65536
  8. #define FIXP16_DP_MASK   0x0000ffff
  9. #define FIXP16_WP_MASK   0xffff0000
  10. #define FIXP16_ROUND_UP  0x00008000
  11.  
  12. // defines for texture mapper triangular analysis
  13. #define TRI_TYPE_NONE           0
  14. #define TRI_TYPE_FLAT_TOP       1 
  15. #define TRI_TYPE_FLAT_BOTTOM    2
  16. #define TRI_TYPE_FLAT_MASK      3
  17. #define TRI_TYPE_GENERAL        4
  18. #define INTERP_LHS              0
  19. #define INTERP_RHS              1
  20. #define MAX_VERTICES_PER_POLY   6
  21.  
  22. // MACROS ///////////////////////////////////////////////////////////////////
  23.  
  24. #define SIGN(x) ((x) > 0 ? (1) : (-1))
  25. #define SWAP(a,b,temp) {temp = a; a=b; b=temp;}
  26.  
  27. // TYPES ///////////////////////////////////////////////////////////////////
  28.  
  29. // basic types
  30. typedef unsigned short USHORT;
  31. typedef unsigned short WORD;
  32. typedef unsigned char  UCHAR;
  33. typedef unsigned char  BYTE;
  34.  
  35. // CLASSES /////////////////////////////////////////////////////////////////
  36.  
  37. // general 3D vertex class
  38. class VERTEX3D
  39. {
  40. public:
  41.  
  42. float x,y,z;
  43. float u,v,i;
  44.  
  45. float length(void) { return(sqrt(x*x + y*y + z*z)); }
  46.  
  47. }; typedef VERTEX3D *VERTEX3D_PTR;
  48.  
  49. ///////////////////////////////////////////////////////////////////////////////
  50.  
  51. // general integer vertex class
  52. class VERTEXI3D
  53. {
  54. public:
  55.  
  56. int x,y,z;
  57. int u,v,i;
  58.  
  59. float length(void) { return(sqrt(x*x + y*y + z*z)); }
  60.  
  61. }; typedef VERTEXI3D *VERTEXI3D_PTR;
  62.  
  63. /////////////////////////////////////////////////////////////////////////////////
  64.  
  65. // general face class, note that 90% of this stuff isn't used, but it
  66. // gives you an idea of what the average 3D engine might keep track of...
  67. class FACE3D
  68. {
  69. public:
  70.  
  71. int      state;      // the state of the face, visible, clipped, culled etc.
  72. int      attr;       // attributes of face, shading, properties etc.
  73. int      num_vertices; // numer of points that make up polygon
  74. int      color;      // color of poly if it's flat shaded
  75. UCHAR    *texture;   // pointer to the texture information
  76. float    nlength;    // length of the normal
  77. int      avg_z;      // average z of vertices, used for simple sorting
  78. VERTEX3D  vlist[MAX_VERTICES_PER_POLY];  // general vertex list
  79. VERTEXI3D tlist[3];                      // triangle vertex list int int form
  80. FACE3D   *prev;      // pointer to previous face in ADS 
  81. FACE3D   *next;      // pointer to next face in ADS
  82.  
  83. }; typedef FACE3D *FACE3D_PTR;