t3dlib7.h
上传用户:husern
上传日期:2018-01-20
资源大小:42486k
文件大小:25k
源码类别:

游戏

开发平台:

Visual C++

  1. // T3DLIB7.H - header file for T3DLIB7.H
  2. // watch for multiple inclusions
  3. #ifndef T3DLIB7
  4. #define T3DLIB7
  5. // DEFINES //////////////////////////////////////////////////////////////////
  6. // defines for texture mapper triangular analysis
  7. #define TRI_TYPE_NONE           0
  8. #define TRI_TYPE_FLAT_TOP       1 
  9. #define TRI_TYPE_FLAT_BOTTOM 2
  10. #define TRI_TYPE_FLAT_MASK      3
  11. #define TRI_TYPE_GENERAL        4
  12. #define INTERP_LHS              0
  13. #define INTERP_RHS              1
  14. #define MAX_VERTICES_PER_POLY   6
  15. // defines for polygons and faces version 2
  16. // attributes of polygons and polygon faces
  17. #define POLY4DV2_ATTR_2SIDED                0x0001
  18. #define POLY4DV2_ATTR_TRANSPARENT           0x0002
  19. #define POLY4DV2_ATTR_8BITCOLOR             0x0004
  20. #define POLY4DV2_ATTR_RGB16                 0x0008
  21. #define POLY4DV2_ATTR_RGB24                 0x0010
  22. #define POLY4DV2_ATTR_SHADE_MODE_PURE       0x0020
  23. #define POLY4DV2_ATTR_SHADE_MODE_CONSTANT   0x0020 // (alias)
  24. #define POLY4DV2_ATTR_SHADE_MODE_EMISSIVE   0x0020 // (alias)
  25. #define POLY4DV2_ATTR_SHADE_MODE_FLAT       0x0040
  26. #define POLY4DV2_ATTR_SHADE_MODE_GOURAUD    0x0080
  27. #define POLY4DV2_ATTR_SHADE_MODE_PHONG      0x0100
  28. #define POLY4DV2_ATTR_SHADE_MODE_FASTPHONG  0x0100 // (alias)
  29. #define POLY4DV2_ATTR_SHADE_MODE_TEXTURE    0x0200 
  30. // new
  31. #define POLY4DV2_ATTR_ENABLE_MATERIAL       0x0800 // use a real material for lighting
  32. #define POLY4DV2_ATTR_DISABLE_MATERIAL      0x1000 // use basic color only for lighting (emulate version 1.0)
  33. // states of polygons and faces
  34. #define POLY4DV2_STATE_NULL               0x0000
  35. #define POLY4DV2_STATE_ACTIVE             0x0001  
  36. #define POLY4DV2_STATE_CLIPPED            0x0002  
  37. #define POLY4DV2_STATE_BACKFACE           0x0004  
  38. #define POLY4DV2_STATE_LIT                0x0008
  39. // (new) used for simple model formats to override/control the lighting
  40. #define VERTEX_FLAGS_OVERRIDE_MASK          0xf000 // this masks these bits to extract them
  41. #define VERTEX_FLAGS_OVERRIDE_CONSTANT      0x1000
  42. #define VERTEX_FLAGS_OVERRIDE_EMISSIVE      0x1000 //(alias)
  43. #define VERTEX_FLAGS_OVERRIDE_PURE          0x1000
  44. #define VERTEX_FLAGS_OVERRIDE_FLAT          0x2000
  45. #define VERTEX_FLAGS_OVERRIDE_GOURAUD       0x4000
  46. #define VERTEX_FLAGS_OVERRIDE_TEXTURE       0x8000
  47. #define VERTEX_FLAGS_INVERT_TEXTURE_U       0x0080   // invert u texture coordinate 
  48. #define VERTEX_FLAGS_INVERT_TEXTURE_V       0x0100   // invert v texture coordinate
  49. #define VERTEX_FLAGS_INVERT_SWAP_UV         0x0800   // swap u and v texture coordinates
  50. // defines for objects version 2
  51. // objects use dynamic allocation now, but keep as max values
  52. #define OBJECT4DV2_MAX_VERTICES           4096  // 64
  53. #define OBJECT4DV2_MAX_POLYS              8192 // 128
  54. // states for objects
  55. #define OBJECT4DV2_STATE_NULL             0x0000
  56. #define OBJECT4DV2_STATE_ACTIVE           0x0001
  57. #define OBJECT4DV2_STATE_VISIBLE          0x0002 
  58. #define OBJECT4DV2_STATE_CULLED           0x0004
  59. // new
  60. #define OBJECT4DV2_ATTR_SINGLE_FRAME      0x0001 // single frame object (emulates ver 1.0)
  61. #define OBJECT4DV2_ATTR_MULTI_FRAME       0x0002 // multi frame object for .md2 support etc.
  62. #define OBJECT4DV2_ATTR_TEXTURES          0x0004 // flags if object contains textured polys?
  63. // render list defines ver 2.0
  64. #define RENDERLIST4DV2_MAX_POLYS          32768
  65. // defines for vertices, these are "hints" to the transform and
  66. // lighting systems to help determine if a particular vertex has
  67. // a valid normal that must be rotated, or a texture coordinate
  68. // that must be clipped etc., this helps us minmize load during lighting
  69. // and rendering since we can determine exactly what kind of vertex we
  70. // are dealing with, something like a (direct3d) flexible vertex format in 
  71. // as much as it can hold:
  72. // point
  73. // point + normal
  74. // point + normal + texture coordinates
  75. #define VERTEX4DTV1_ATTR_NULL             0x0000 // this vertex is empty
  76. #define VERTEX4DTV1_ATTR_POINT            0x0001
  77. #define VERTEX4DTV1_ATTR_NORMAL           0x0002
  78. #define VERTEX4DTV1_ATTR_TEXTURE          0x0004
  79. // these are some defines for conditional compilation of the new rasterizers
  80. // I don't want 80 million different functions, so I have decided to 
  81. // use some conditionals to change some of the logic in each
  82. // these names aren't necessarily the most accurate, but 3 should be enough
  83. #define RASTERIZER_ACCURATE    0 // sub-pixel accurate with fill convention
  84. #define RASTERIZER_FAST        1 // 
  85. #define RASTERIZER_FASTEST     2
  86. // set this to the mode you want the engine to use
  87. #define RASTERIZER_MODE        RASTERIZER_ACCURATE
  88. // TYPES ///////////////////////////////////////////////////////////////////
  89. // integer 2D vector, point without the w ////////////////////////
  90. typedef struct VECTOR2DI_TYP
  91. {
  92. union
  93.     {
  94.     int M[2]; // array indexed storage
  95.     // explicit names
  96.     struct
  97.          {
  98.          int x,y;
  99.          }; // end struct
  100.     }; // end union
  101. } VECTOR2DI, POINT2DI, *VECTOR2DI_PTR, *POINT2DI_PTR;
  102. // integer 3D vector, point without the w ////////////////////////
  103. typedef struct VECTOR3DI_TYP
  104. {
  105. union
  106.     {
  107.     int M[3]; // array indexed storage
  108.     // explicit names
  109.     struct
  110.          {
  111.          int x,y,z;
  112.          }; // end struct
  113.     }; // end union
  114. } VECTOR3DI, POINT3DI, *VECTOR3DI_PTR, *POINT3DI_PTR;
  115. // integer 4D homogenous vector, point with w ////////////////////
  116. typedef struct VECTOR4DI_TYP
  117. {
  118. union
  119.     {
  120.     int M[4]; // array indexed storage
  121.     // explicit names
  122.     struct
  123.          {
  124.          int x,y,z,w;
  125.          }; // end struct
  126.     }; // end union
  127. } VECTOR4DI, POINT4DI, *VECTOR4DI_PTR, *POINT4DI_PTR;
  128. // 4D homogeneous vertex with 2 texture coordinates, and vertex normal ////////////////
  129. // normal can be interpreted as vector or point
  130. typedef struct VERTEX4DTV1_TYP
  131. {
  132. union
  133.     {
  134.     float M[12];            // array indexed storage
  135.     // explicit names
  136.     struct
  137.          {
  138.          float x,y,z,w;     // point
  139.          float nx,ny,nz,nw; // normal (vector or point)
  140.         float u0,v0;       // texture coordinates 
  141.          float i;           // final vertex intensity after lighting
  142.          int   attr;        // attributes/ extra texture coordinates
  143.          };                 // end struct
  144.      
  145.      // high level types
  146.      struct 
  147.           {
  148.           POINT4D  v;       // the vertex
  149.           VECTOR4D n;       // the normal
  150.           POINT2D  t;       // texture coordinates
  151.           };
  152.     }; // end union
  153. } VERTEX4DTV1, *VERTEX4DTV1_PTR;
  154. // a self contained polygon used for the render list version 2 /////////////////////////
  155. typedef struct POLYF4DV2_TYP
  156. {
  157. int      state;           // state information
  158. int      attr;            // physical attributes of polygon
  159. int      color;           // color of polygon
  160. int      lit_color[3];    // holds colors after lighting, 0 for flat shading
  161.                           // 0,1,2 for vertex colors after vertex lighting
  162. BITMAP_IMAGE_PTR texture; // pointer to the texture information for simple texture mapping
  163. int      mati;    // material index (-1) for no material  (new)
  164. float    nlength; // length of the polygon normal if not normalized (new)
  165. VECTOR4D normal;  // the general polygon normal (new)
  166. float    avg_z;   // average z of vertices, used for simple sorting (new)
  167. VERTEX4DTV1 vlist[3];  // the vertices of this triangle 
  168. VERTEX4DTV1 tvlist[3]; // the vertices after transformation if needed 
  169. POLYF4DV2_TYP *next;   // pointer to next polygon in list??
  170. POLYF4DV2_TYP *prev;   // pointer to previous polygon in list??
  171. } POLYF4DV2, *POLYF4DV2_PTR;
  172. // a polygon ver 2.0 based on an external vertex list  //////////////////////////////////
  173. typedef struct POLY4DV2_TYP
  174. {
  175. int state;           // state information
  176. int attr;            // physical attributes of polygon
  177. int color;           // color of polygon
  178. int lit_color[3];    // holds colors after lighting, 0 for flat shading
  179.                      // 0,1,2 for vertex colors after vertex lighting
  180. BITMAP_IMAGE_PTR texture; // pointer to the texture information for simple texture mapping
  181. int mati;              // material index (-1) no material (new)
  182. VERTEX4DTV1_PTR vlist; // the vertex list itself 
  183. POINT2D_PTR     tlist; // the texture list itself (new)
  184. int vert[3];           // the indices into the vertex list
  185. int text[3];           // the indices into the texture coordinate list (new)
  186. float nlength;         // length of normal (new)
  187. } POLY4DV2, *POLY4DV2_PTR;
  188. // an object ver 2.0 based on a vertex list and list of polygons //////////////////////////
  189. // this new object has a lot more flexibility and it supports "framed" animation
  190. // that is this object can hold hundreds of frames of an animated mesh as long as
  191. // the mesh has the same polygons and geometry, but with changing vertex positions
  192. // similar to the Quake II .md2 format
  193. typedef struct OBJECT4DV2_TYP
  194. {
  195. int   id;           // numeric id of this object
  196. char  name[64];     // ASCII name of object just for kicks
  197. int   state;        // state of object
  198. int   attr;         // attributes of object
  199. int   mati;         // material index overide (-1) - no material (new)
  200. float *avg_radius;  // [OBJECT4DV2_MAX_FRAMES];   // average radius of object used for collision detection
  201. float *max_radius;  // [OBJECT4DV2_MAX_FRAMES];   // maximum radius of object
  202. POINT4D world_pos;  // position of object in world
  203. VECTOR4D dir;       // rotation angles of object in local
  204.                     // cords or unit direction vector user defined???
  205. VECTOR4D ux,uy,uz;  // local axes to track full orientation
  206.                     // this is updated automatically during
  207.                     // rotation calls
  208. int num_vertices;   // number of vertices per frame of this object
  209. int num_frames;     // number of frames
  210. int total_vertices; // total vertices, redudant, but it saves a multiply in a lot of places
  211. int curr_frame;     // current animation frame (0) if single frame
  212. VERTEX4DTV1_PTR vlist_local; // [OBJECT4DV1_MAX_VERTICES]; // array of local vertices
  213. VERTEX4DTV1_PTR vlist_trans; // [OBJECT4DV1_MAX_VERTICES]; // array of transformed vertices
  214. // these are needed to track the "head" of the vertex list for mult-frame objects
  215. VERTEX4DTV1_PTR head_vlist_local;
  216. VERTEX4DTV1_PTR head_vlist_trans;
  217. // texture coordinates list (new)
  218. POINT2D_PTR tlist;       // 3*num polys at max
  219. BITMAP_IMAGE_PTR texture; // pointer to the texture information for simple texture mapping (new)
  220. int num_polys;           // number of polygons in object mesh
  221. POLY4DV2_PTR plist;      // ptr to polygons (new)
  222. int   ivar1, ivar2;      // auxiliary vars
  223. float fvar1, fvar2;      // auxiliary vars
  224. // METHODS //////////////////////////////////////////////////
  225. // setting the frame is so important that it should be a member function
  226. // calling functions without doing this can wreak havok!
  227. int Set_Frame(int frame);
  228. } OBJECT4DV2, *OBJECT4DV2_PTR;
  229. // object to hold the render list version 2.0, this way we can have more
  230. // than one render list at a time
  231. typedef struct RENDERLIST4DV2_TYP
  232. {
  233. int state; // state of renderlist ???
  234. int attr;  // attributes of renderlist ???
  235. // the render list is an array of pointers each pointing to 
  236. // a self contained "renderable" polygon face POLYF4DV2
  237. POLYF4DV2_PTR poly_ptrs[RENDERLIST4DV2_MAX_POLYS];
  238. // additionally to cut down on allocatation, de-allocation
  239. // of polygons each frame, here's where the actual polygon
  240. // faces will be stored
  241. POLYF4DV2 poly_data[RENDERLIST4DV2_MAX_POLYS];
  242. int num_polys; // number of polys in render list
  243. } RENDERLIST4DV2, *RENDERLIST4DV2_PTR;
  244. // CLASSES /////////////////////////////////////////////////////////////////
  245. // MACROS ///////////////////////////////////////////////////////////////////
  246. // floating point comparison
  247. #define FCMP(a,b) ( (fabs(a-b) < EPSILON_E3) ? 1 : 0)
  248. inline void VERTEX4DTV1_COPY(VERTEX4DTV1_PTR vdst, VERTEX4DTV1_PTR vsrc)
  249. { *vdst = *vsrc; }
  250. inline void VERTEX4DTV1_INIT(VERTEX4DTV1_PTR vdst, VERTEX4DTV1_PTR vsrc)
  251. { *vdst = *vsrc; }
  252. inline float VECTOR4D_Length_Fast2(VECTOR4D_PTR va)
  253. {
  254. // this function computes the distance from the origin to x,y,z
  255. int temp;  // used for swaping
  256. int x,y,z; // used for algorithm
  257. // make sure values are all positive
  258. x = fabs(va->x) * 1024;
  259. y = fabs(va->y) * 1024;
  260. z = fabs(va->z) * 1024;
  261. // sort values
  262. if (y < x) SWAP(x,y,temp)
  263. if (z < y) SWAP(y,z,temp)
  264. if (y < x) SWAP(x,y,temp)
  265. int dist = (z + 11 * (y >> 5) + (x >> 2) );
  266. // compute distance with 8% error
  267. return((float)(dist >> 10));
  268. } // end VECTOR4D_Length_Fast2
  269. // TYPES ///////////////////////////////////////////////////////////////////
  270. // EXTERNALS ///////////////////////////////////////////////////////////////
  271. extern UCHAR logbase2ofx[513];
  272. extern UCHAR rgblightlookup[4096][256]; // rgb 8.12 lighting table lookup
  273. extern char texture_path[80]; // root path to ALL textures, make current directory for now
  274. // PROTOTYPES //////////////////////////////////////////////////////////////
  275. char *Extract_Filename_From_Path(char *filepath, char *filename);
  276. int Set_OBJECT4DV2_Frame(OBJECT4DV2_PTR obj, int frame);
  277. int Destroy_OBJECT4DV2(OBJECT4DV2_PTR obj);
  278. int Init_OBJECT4DV2(OBJECT4DV2_PTR obj,   // object to allocate
  279.                      int _num_vertices, 
  280.                      int _num_polys, 
  281.                      int _num_frames,
  282.                      int destroy=0);
  283. void Translate_OBJECT4DV2(OBJECT4DV2_PTR obj, VECTOR4D_PTR vt);
  284. void Scale_OBJECT4DV2(OBJECT4DV2_PTR obj, VECTOR4D_PTR vs, int all_frames=0);
  285. void Transform_OBJECT4DV2(OBJECT4DV2_PTR obj, MATRIX4X4_PTR mt,   
  286.                           int coord_select, int transform_basis, int all_frames=0);
  287.                                                
  288. void Rotate_XYZ_OBJECT4DV2(OBJECT4DV2_PTR obj, 
  289.                           float theta_x,     
  290.                           float theta_y, 
  291.                           float theta_z,
  292.                           int all_frames);
  293. void Model_To_World_OBJECT4DV2(OBJECT4DV2_PTR obj, int coord_select = TRANSFORM_LOCAL_TO_TRANS, int all_frames=0);
  294. int Cull_OBJECT4DV2(OBJECT4DV2_PTR obj, CAM4DV1_PTR cam, int cull_flags);
  295. void Remove_Backfaces_OBJECT4DV2(OBJECT4DV2_PTR obj, CAM4DV1_PTR cam);
  296. void Remove_Backfaces_RENDERLIST4DV2(RENDERLIST4DV2_PTR rend_list, CAM4DV1_PTR cam);
  297. void World_To_Camera_OBJECT4DV2(OBJECT4DV2_PTR obj, CAM4DV1_PTR cam);
  298. void Camera_To_Perspective_OBJECT4DV2(OBJECT4DV2_PTR obj, CAM4DV1_PTR cam);
  299. void Perspective_To_Screen_RENDERLIST4DV2(RENDERLIST4DV2_PTR rend_list, 
  300.                                           CAM4DV1_PTR cam);
  301. void Camera_To_Perspective_Screen_RENDERLIST4DV2(RENDERLIST4DV2_PTR rend_list, 
  302.                                                  CAM4DV1_PTR cam);
  303. void Camera_To_Perspective_RENDERLIST4DV2(RENDERLIST4DV2_PTR rend_list, 
  304.                                           CAM4DV1_PTR cam);
  305. void Camera_To_Perspective_Screen_OBJECT4DV2(OBJECT4DV2_PTR obj, CAM4DV1_PTR cam);
  306. void Perspective_To_Screen_OBJECT4DV2(OBJECT4DV2_PTR obj, CAM4DV1_PTR cam);
  307. void Convert_From_Homogeneous4D_OBJECT4DV1(OBJECT4DV1_PTR obj);
  308. int Insert_POLY4DV2_RENDERLIST4DV2(RENDERLIST4DV2_PTR rend_list, 
  309.                                    POLY4DV2_PTR poly);
  310. int Insert_POLYF4DV2_RENDERLIST4DV2(RENDERLIST4DV2_PTR rend_list, 
  311.                                      POLYF4DV2_PTR poly);
  312. int Insert_OBJECT4DV2_RENDERLIST4DV2(RENDERLIST4DV2_PTR rend_list, 
  313.                                       OBJECT4DV2_PTR obj,
  314.                                       int insert_local);
  315. void Reset_OBJECT4DV2(OBJECT4DV2_PTR obj);
  316. int Compute_OBJECT4DV2_Poly_Normals(OBJECT4DV2_PTR obj);
  317. void Draw_OBJECT4DV2_Wire(OBJECT4DV2_PTR obj, UCHAR *video_buffer, int lpitch);
  318. void Draw_OBJECT4DV2_Wire16(OBJECT4DV2_PTR obj, UCHAR *video_buffer, int lpitch);
  319. void Draw_RENDERLIST4DV2_Wire(RENDERLIST4DV2_PTR rend_list, 
  320.                               UCHAR *video_buffer, int lpitch);
  321. void Draw_RENDERLIST4DV2_Wire16(RENDERLIST4DV2_PTR rend_list, 
  322.                               UCHAR *video_buffer, int lpitch);
  323. void Draw_RENDERLIST4DV2_Solid(RENDERLIST4DV2_PTR rend_list, 
  324.                               UCHAR *video_buffer, int lpitch);
  325. void Draw_RENDERLIST4DV2_Solid16(RENDERLIST4DV2_PTR rend_list, 
  326.                               UCHAR *video_buffer, int lpitch);
  327. void Draw_OBJECT4DV2_Textured(OBJECT4DV2_PTR obj, UCHAR *video_buffer, int lpitch);
  328. void Draw_RENDERLIST4DV2_Textured(RENDERLIST4DV2_PTR rend_list, 
  329.                                   UCHAR *video_buffer, int lpitch, BITMAP_IMAGE_PTR texture);
  330. void Draw_RENDERLIST4DV2_Textured16(RENDERLIST4DV2_PTR rend_list, 
  331.                                     UCHAR *video_buffer, int lpitch, BITMAP_IMAGE_PTR texture);
  332. void Draw_OBJECT4DV1_Solid2_16(OBJECT4DV1_PTR obj, 
  333.                             UCHAR *video_buffer, int lpitch);
  334. void Draw_RENDERLIST4DV1_Solid2(RENDERLIST4DV1_PTR rend_list, 
  335.                               UCHAR *video_buffer, int lpitch);
  336. void Draw_OBJECT4DV1_Solid2(OBJECT4DV1_PTR obj, 
  337.                           UCHAR *video_buffer, int lpitch);
  338. void World_To_Camera_RENDERLIST4DV2(RENDERLIST4DV2_PTR rend_list, 
  339.                                    CAM4DV1_PTR cam);
  340. void Draw_OBJECT4DV1_Solid2_16(OBJECT4DV1_PTR obj, 
  341.                             UCHAR *video_buffer, int lpitch);
  342. void Draw_RENDERLIST4DV1_Solid2(RENDERLIST4DV1_PTR rend_list, 
  343.                               UCHAR *video_buffer, int lpitch);
  344. void Draw_OBJECT4DV1_Solid2(OBJECT4DV1_PTR obj, 
  345.                           UCHAR *video_buffer, int lpitch);
  346. void Draw_OBJECT4DV1_Textured(OBJECT4DV1_PTR obj, UCHAR *video_buffer, int lpitch);
  347. void Draw_RENDERLIST4DV1_Textured(RENDERLIST4DV1_PTR rend_list, 
  348.                                   UCHAR *video_buffer, int lpitch, BITMAP_IMAGE_PTR texture);
  349. void Draw_RENDERLIST4DV1_Textured16(RENDERLIST4DV1_PTR rend_list, 
  350.                                     UCHAR *video_buffer, int lpitch, BITMAP_IMAGE_PTR texture);
  351. void Draw_RENDERLIST4DV2_Gouraud16(RENDERLIST4DV2_PTR rend_list, 
  352.                                     UCHAR *video_buffer, int lpitch);
  353. void Draw_RENDERLIST4DV1_Solid2_16(RENDERLIST4DV1_PTR rend_list, 
  354.                                 UCHAR *video_buffer, int lpitch);
  355. void Draw_OBJECT4DV1_Solid2_16(OBJECT4DV1_PTR obj, 
  356.                             UCHAR *video_buffer, int lpitch);
  357. void Draw_RENDERLIST4DV1_Solid2_16(RENDERLIST4DV1_PTR rend_list, 
  358.                                 UCHAR *video_buffer, int lpitch);
  359. void Draw_OBJECT4DV1_Solid2_16(OBJECT4DV1_PTR obj, 
  360.                             UCHAR *video_buffer, int lpitch);
  361. void Draw_RENDERLIST4DV1_Solid2(RENDERLIST4DV1_PTR rend_list, 
  362.                                 UCHAR *video_buffer, int lpitch);
  363. void Draw_OBJECT4DV1_Solid2(OBJECT4DV1_PTR obj, 
  364.                             UCHAR *video_buffer, int lpitch);
  365. float Compute_OBJECT4DV2_Radius(OBJECT4DV2_PTR obj);
  366. int Compute_OBJECT4DV2_Vertex_Normals(OBJECT4DV2_PTR obj);
  367. int Load_OBJECT4DV2_PLG(OBJECT4DV2_PTR obj, // pointer to object
  368.                     char *filename,         // filename of plg file
  369.                     VECTOR4D_PTR scale,     // initial scaling factors
  370.                     VECTOR4D_PTR pos,       // initial position
  371.                     VECTOR4D_PTR rot,       // initial rotations
  372.                     int vertex_flags=0);    // flags to re-order vertices
  373.  
  374. int Load_OBJECT4DV2_3DSASC(OBJECT4DV2_PTR obj,   // pointer to object
  375.                            char *filename,       // filename of ASC file
  376.                            VECTOR4D_PTR scale,   // initial scaling factors
  377.                            VECTOR4D_PTR pos,     // initial position
  378.                            VECTOR4D_PTR rot,     // initial rotations
  379.                            int vertex_flags=0);  // flags to re-order vertices
  380. int Load_OBJECT4DV2_COB(OBJECT4DV2_PTR obj,   // pointer to object
  381.                         char *filename,       // filename of Caligari COB file
  382.                         VECTOR4D_PTR scale,   // initial scaling factors
  383.                         VECTOR4D_PTR pos,     // initial position
  384.                         VECTOR4D_PTR rot,     // initial rotations
  385.                         int vertex_flags=0);  // flags to re-order vertices 
  386.                                               // and perform transforms
  387. void Reset_RENDERLIST4DV2(RENDERLIST4DV2_PTR rend_list);
  388. int RGB_12_8_Lighting_Table_Builder(LPPALETTEENTRY src_palette,   // source palette
  389.                                     UCHAR rgblookup[4096][256]);  // lookup table
  390. int Light_OBJECT4DV2_World16(OBJECT4DV2_PTR obj,  // object to process
  391.                              CAM4DV1_PTR cam,     // camera position
  392.                              LIGHTV1_PTR lights,  // light list (might have more than one)
  393.                              int max_lights);     // maximum lights in list
  394. int Light_OBJECT4DV2_World(OBJECT4DV2_PTR obj,  // object to process
  395.                            CAM4DV1_PTR cam,     // camera position
  396.                            LIGHTV1_PTR lights,  // light list (might have more than one)
  397.                            int max_lights);      // maximum lights in list
  398. int Light_RENDERLIST4DV2_World(RENDERLIST4DV2_PTR rend_list,  // list to process
  399.                                  CAM4DV1_PTR cam,     // camera position
  400.                                  LIGHTV1_PTR lights,  // light list (might have more than one)
  401.                                  int max_lights);     // maximum lights in list
  402. int Light_RENDERLIST4DV2_World16(RENDERLIST4DV2_PTR rend_list,  // list to process
  403.                                  CAM4DV1_PTR cam,     // camera position
  404.                                  LIGHTV1_PTR lights,  // light list (might have more than one)
  405.                                  int max_lights);     // maximum lights in list
  406. // z-sort algorithm (simple painters algorithm)
  407. void Sort_RENDERLIST4DV2(RENDERLIST4DV2_PTR rend_list, int sort_method);
  408. // avg z-compare
  409. int Compare_AvgZ_POLYF4DV2(const void *arg1, const void *arg2);
  410. // near z-compare
  411. int Compare_NearZ_POLYF4DV2(const void *arg1, const void *arg2);
  412. // far z-compare
  413. int Compare_FarZ_POLYF4DV2(const void *arg1, const void *arg2);
  414. void Draw_Textured_Triangle(POLYF4DV2_PTR face, UCHAR *dest_buffer, int mem_pitch);
  415. void Draw_Textured_TriangleFS(POLYF4DV2_PTR face,   // ptr to face
  416.                               UCHAR *_dest_buffer,    // pointer to video buffer
  417.                               int mem_pitch);         // bytes per line, 320, 640 etc.
  418. void Draw_Textured_Triangle16(POLYF4DV2_PTR face, UCHAR *dest_buffer, int mem_pitch);
  419. void Draw_Textured_TriangleFS16(POLYF4DV2_PTR face,   // ptr to face
  420.                               UCHAR *_dest_buffer,    // pointer to video buffer
  421.                               int mem_pitch);         // bytes per line, 320, 640 etc.
  422. void Draw_Gouraud_Triangle16(POLYF4DV2_PTR face,   // ptr to face
  423.                              UCHAR *_dest_buffer,  // pointer to video buffer
  424.                              int mem_pitch);       // bytes per line, 320, 640 etc.
  425. void Draw_Gouraud_Triangle(POLYF4DV2_PTR face,     // ptr to face
  426.                              UCHAR *dest_buffer,   // pointer to video buffer
  427.                              int mem_pitch);       // bytes per line, 320, 640 etc.
  428. void Draw_Top_Tri2_16(float x1, float y1, 
  429.                       float x2, float y2, 
  430.                       float x3, float y3,
  431.                       int color, 
  432.                       UCHAR *_dest_buffer, int mempitch);
  433. void Draw_Bottom_Tri2_16(float x1, float y1, 
  434.                          float x2, float y2, 
  435.                          float x3, float y3,
  436.                          int color,
  437.                          UCHAR *_dest_buffer, int mempitch);
  438. void Draw_Triangle_2D2_16(float x1, float y1,
  439.                           float x2, float y2,
  440.                           float x3, float y3,
  441.                           int color,
  442.                           UCHAR *dest_buffer, int mempitch);
  443. void Draw_Top_Tri2(float x1, float y1, 
  444.                       float x2, float y2, 
  445.                       float x3, float y3,
  446.                       int color, 
  447.                       UCHAR *_dest_buffer, int mempitch);
  448. void Draw_Bottom_Tri2(float x1, float y1, 
  449.                          float x2, float y2, 
  450.                          float x3, float y3,
  451.                          int color,
  452.                          UCHAR *_dest_buffer, int mempitch);
  453. void Draw_Triangle_2D2(float x1, float y1,
  454.                           float x2, float y2,
  455.                           float x3, float y3,
  456.                           int color,
  457.                           UCHAR *dest_buffer, int mempitch);
  458. int Load_Bitmap_File2(BITMAP_FILE_PTR bitmap, char *filename);
  459. int Load_Bitmap_PCX_File(BITMAP_FILE_PTR bitmap, char *filename);
  460. #endif
  461.