home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 36 / #36-1.iso / quake / Files / md2 / src / md2.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-03-25  |  3.3 KB  |  161 lines

  1. /*****************************************************************
  2. Copyright (c) 1998 Jawed Karim <jkarim@students.uiuc.edu>
  3. All rights reserved.
  4.  
  5. This source code has been provided to you under the condition
  6. that you adhere to the following terms:
  7.  
  8. 1. YOU MAY USE THIS SOURCE CODE PRIVATELY WITHOUT RESTRICTIONS.
  9.  
  10. 2. REDISTRIBUTIONS OF MODIFICATIONS OF THIS PROGRAM IN BINARY OR
  11.    IN SOURCE CODE FORM ARE NOT PERMITTED.
  12.  
  13. 3. REDISTRIBUTIONS OF THIS SOURCE CODE ARE ONLY PERMITTED IF
  14.    THE SOURCE CODE REMAINS COMPLETELY UNCHANGED AND ALL THE
  15.    FILES WHICH WERE IN THE ORIGINAL DISTRIBUTION ARE INCLUDED.
  16.  
  17. 4. ALL SOFTWARE USING SECTIONS OF THIS SOURCE CODE MUST GIVE
  18.    EXPLICIT ACKNOWLEDGMENT TO JAWED KARIM IN THE PROGRAM
  19.    ITSELF AS WELL AS IN THE DOCUMENTATION.
  20.  
  21. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
  22. OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  23. WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24. ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
  25. DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26. DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
  27. GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  28. INTERRUPTION).
  29. *****************************************************************/
  30.  
  31. #include <stdio.h>
  32. #include <iostream.h>
  33. #include <windows.h>
  34. #include <commctrl.h>
  35. #include <windowsx.h>
  36. #include <math.h>
  37.  
  38. #define MAX_TRIANGLES 4096
  39. #define MAX_VERTS 2048
  40. #define MAX_FRAMES 512
  41. #define MAX_MD2SKINS 32
  42. #define MAX_SKINNAME 64
  43.  
  44. typedef struct
  45. {
  46.     int a, b, c;
  47.     int a_s, a_t,
  48.         b_s, b_t,
  49.         c_s, c_t;
  50. } make_index_list;
  51.  
  52. typedef struct
  53. {
  54.     float x, y, z;
  55. } make_vertex_list;
  56.  
  57. typedef struct
  58. {
  59.     make_vertex_list *vertex;
  60. } make_frame_list;
  61.  
  62. typedef unsigned char byte;
  63.  
  64. typedef struct
  65. {
  66.     float v[3];
  67. }vec3_t;
  68.  
  69. typedef struct
  70. {
  71.     short s;
  72.     short t;
  73. } dstvert_t;
  74.  
  75. typedef struct 
  76. {
  77.     short index_xyz[3];
  78.     short index_st[3];
  79. } dtriangle_t;
  80.  
  81.  
  82. typedef struct
  83. {
  84.     byte v[3];
  85.     byte lightnormalindex;
  86. } dtrivertx_t;
  87.  
  88. typedef struct
  89. {
  90.     float scale[3];
  91.     float translate[3];
  92.     char name[16];
  93.     dtrivertx_t verts[1];
  94.  
  95. } daliasframe_t;
  96.  
  97. typedef struct
  98. {
  99.     int ident;
  100.     int version;
  101.  
  102.     int skinwidth;
  103.     int skinheight;
  104.     int framesize;
  105.  
  106.     int num_skins;
  107.     int num_xyz;
  108.     int num_st;
  109.     int num_tris;
  110.     int num_glcmds;
  111.     int num_frames;
  112.  
  113.     int ofs_skins;
  114.     int ofs_st;
  115.     int ofs_tris;
  116.     int ofs_frames;
  117.     int ofs_glcmds; 
  118.     int ofs_end;
  119.  
  120. } dmdl_t;
  121.  
  122. typedef struct
  123. {
  124.         vec3_t          v;
  125.         int        lightnormalindex;
  126. } trivert_t;
  127.  
  128. typedef struct
  129. {
  130.         vec3_t          mins, maxs;
  131.         char            name[16];
  132.         trivert_t       v[MAX_VERTS];
  133. } frame_t;
  134.  
  135. //////////////////////////////////////////////////////////////////////////////////////
  136.  
  137. class CMD2 {
  138.  
  139. friend void redraw (int);
  140.  
  141. public:
  142.     CMD2();
  143.     ~CMD2();
  144.  
  145.     int Read (char []);
  146.     void Destroy (void);
  147.  
  148.     inline long getnumberFrames (void) {return (long)m_iFrames;};
  149.     inline long getnumberVertices (void) {return (long)m_iVertices;};
  150.     inline long getnumberTriangles (void){return (long)m_iTriangles;};
  151.  
  152.     void SafeRead (FILE *f, void *buffer, int count) {fread (buffer, 1, count, f);}
  153.  
  154. private:
  155.  
  156.     make_index_list *m_index_list;
  157.     make_frame_list *m_frame_list;
  158.  
  159.     long m_iFrames, m_iVertices, m_iTriangles;
  160. };
  161.