home *** CD-ROM | disk | FTP | other *** search
/ Fish 'n' More 2 / fishmore-publicdomainlibraryvol.ii1991xetec.iso / dirs / dkbtrace_397.lzh / DKBTrace / DKBSource.LZH / dkbproto.h < prev    next >
C/C++ Source or Header  |  1990-08-26  |  17KB  |  341 lines

  1. /*****************************************************************************
  2. *
  3. *                                  dkbproto.h
  4. *
  5. *   from DKBTrace (c) 1990  David Buck
  6. *
  7. *  This module defines the prototypes for all system-independent functions.
  8. *
  9. * This software is freely distributable. The source and/or object code may be
  10. * copied or uploaded to communications services so long as this notice remains
  11. * at the top of each file.  If any changes are made to the program, you must
  12. * clearly indicate in the documentation and in the programs startup message
  13. * who it was who made the changes. The documentation should also describe what
  14. * those changes were. This software may not be included in whole or in
  15. * part into any commercial package without the express written consent of the
  16. * author.  It may, however, be included in other public domain or freely
  17. * distributed software so long as the proper credit for the software is given.
  18. *
  19. * This software is provided as is without any guarantees or warranty. Although
  20. * the author has attempted to find and correct any bugs in the software, he
  21. * is not responsible for any damage caused by the use of the software.  The
  22. * author is under no obligation to provide service, corrections, or upgrades
  23. * to this package.
  24. *
  25. * Despite all the legal stuff above, if you do find bugs, I would like to hear
  26. * about them.  Also, if you have any comments or questions, you may contact me
  27. * at the following address:
  28. *
  29. *     David Buck
  30. *     22C Sonnet Cres.
  31. *     Nepean Ontario
  32. *     Canada, K2H 8W7
  33. *
  34. *  I can also be reached on the following bulleton boards:
  35. *
  36. *     ATX              (613) 526-4141
  37. *     OMX              (613) 731-3419
  38. *     Mystic           (613) 731-0088 or (613) 731-6698
  39. *
  40. *  Fidonet:   1:163/109.9
  41. *  Internet:  David_Buck@Carleton.CA
  42. *
  43. *  IBM Port by Aaron A. Collins. Aaron may be reached on the following BBS'es:
  44. *
  45. *     Lattice BBS                      (708) 916-1200
  46. *     The Information Exchange BBS     (708) 945-5575
  47. *     Stillwaters BBS                  (708) 403-2826
  48. *
  49. *****************************************************************************/
  50.  
  51.  
  52. /* Prototypes for functions defined in trace.c */
  53. void close_all PARAMS((void));
  54. void get_defaults PARAMS((void));
  55. void read_options PARAMS((char *file_name));
  56. void parse_option PARAMS((char *Option_String));
  57. void parse_file_name PARAMS((char *File_Name));
  58. void Print_Options PARAMS((void));
  59. void print_stats PARAMS((void));
  60.  
  61. /* Prototypes for functions defined in render.c */
  62. void Create_Ray PARAMS((RAY *ray, int width, int height, DBL x, DBL y));
  63. void Write_Line PARAMS((COLOUR *Line, int y));
  64. void Supersample PARAMS((COLOUR *result, int x, int y, int Width, int Height));
  65. void Start_Tracing PARAMS((void));
  66. void Trace PARAMS((RAY *Ray, COLOUR *Colour));
  67.  
  68. /* Prototypes for functions defined in tokenize.c */
  69. void Tokenize PARAMS((char *name, FILE *in, FILE *symbol, FILE *out));
  70. int Process_Token PARAMS((void));
  71. int Skip_Spaces PARAMS((void));
  72. int Parse_Comments PARAMS((void));
  73. void Begin_String PARAMS((void));
  74. void Stuff_Character PARAMS((char c));
  75. void End_String PARAMS((void));
  76. int Read_Float PARAMS((void));
  77. int Parse_String PARAMS((void));
  78. int Read_Include PARAMS((void));
  79. int Read_Symbol PARAMS((void));
  80. int Find_Reserved PARAMS((void));
  81. int Find_Symbol PARAMS((void));
  82. void Write_Token PARAMS((enum Token_Type Token_Id));
  83. void Token_Error PARAMS((char *str));
  84.  
  85. /* Prototypes for functions defined in parse.c */
  86. void Parse PARAMS((FILE *File, FRAME *Frame_Ptr));
  87. void Token_Init PARAMS((void));
  88. int Get_Token PARAMS((void));
  89. void Unget_Token PARAMS((void));
  90. void Frame_Init PARAMS((void));
  91. COMPOSITE *Get_Composite_Object PARAMS((void));
  92. SPHERE *Get_Sphere_Shape PARAMS((void));
  93. QUADRIC *Get_Quadric_Shape PARAMS((void));
  94. PLANE *Get_Plane_Shape PARAMS((void));
  95. TRIANGLE *Get_Triangle_Shape PARAMS((void));
  96. SMOOTH_TRIANGLE *Get_Smooth_Triangle_Shape PARAMS((void));
  97. CSG_SHAPE *Get_CSG_Shape PARAMS((void));
  98. CSG_SHAPE *Get_CSG_Union PARAMS((void));
  99. CSG_SHAPE *Get_CSG_Intersection PARAMS((void));
  100. CSG_SHAPE *Get_CSG_Difference PARAMS((void));
  101. void Set_CSG_Parents PARAMS((CSG_SHAPE *, OBJECT *));
  102. OBJECT *Get_Object PARAMS((void));
  103. TEXTURE *Get_Texture PARAMS((void));
  104. VIEWPOINT *Get_Viewpoint PARAMS((void));
  105. COLOUR *Get_Colour PARAMS((void));
  106. VECTOR *Get_Vector PARAMS((void));
  107. DBL *Get_Float PARAMS((void));
  108. TRANSFORMATION *Get_Transformation PARAMS((void));
  109. DBL Parse_Float PARAMS((void));
  110. void Parse_Vector PARAMS((VECTOR *Given_Vector));
  111. void Parse_Colour PARAMS((COLOUR *Given_Colour));
  112. COLOUR_MAP *Parse_Colour_Map PARAMS((void));
  113. TEXTURE *Copy_Texture PARAMS((TEXTURE *Texture));
  114. TEXTURE *Parse_Texture PARAMS((TEXTURE *Old_Texture));
  115. SHAPE *Parse_Sphere PARAMS((void));
  116. SHAPE *Parse_Plane PARAMS((void));
  117. SHAPE *Parse_Triangle PARAMS((void));
  118. SHAPE *Parse_Smooth_Triangle PARAMS((void));
  119. SHAPE *Parse_Quadric PARAMS((void));
  120. CSG_SHAPE *Parse_CSG PARAMS((int type, OBJECT *Parent_Object));
  121. SHAPE *Parse_Shape PARAMS((OBJECT *Object));
  122. OBJECT *Parse_Object PARAMS((void));
  123. OBJECT *Parse_Composite PARAMS((void));
  124. void Parse_Fog PARAMS((void));
  125. void Parse_Frame PARAMS((void));
  126. void Parse_Viewpoint PARAMS((VIEWPOINT *Given_Vp));
  127. void Parse_Declare PARAMS((void));
  128. void Init_Viewpoint PARAMS((VIEWPOINT *vp));
  129. void Link PARAMS((OBJECT *New_Object,
  130.           OBJECT **Field,
  131.           OBJECT **Old_Object_List));
  132. CONSTANT Find_Constant PARAMS((void));
  133. char *Get_Token_String PARAMS((TOKEN Token_Id));
  134. void Parse_Error PARAMS((TOKEN Token_Id));
  135. void Type_Error PARAMS((void));
  136. void Undeclared PARAMS((void));
  137. void Error PARAMS((char *str));
  138.  
  139. /* Prototypes for functions defined in objects.c */
  140. INTERSECTION *Object_Intersect PARAMS((OBJECT *Object, RAY *Ray));
  141. int All_Composite_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  142. int All_Object_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  143. int Inside_Basic_Object PARAMS((VECTOR *Point, OBJECT *Object)); 
  144. int Inside_Composite_Object PARAMS((VECTOR *Point, OBJECT *Object));
  145. void *Copy_Basic_Object PARAMS((OBJECT *Object));
  146. void *Copy_Composite_Object PARAMS((OBJECT *Object));
  147. void Translate_Basic_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  148. void Rotate_Basic_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  149. void Scale_Basic_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  150. void Translate_Composite_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  151. void Rotate_Composite_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  152. void Scale_Composite_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  153. void Invert_Basic_Object PARAMS((OBJECT *Object));
  154. void Invert_Composite_Object PARAMS((OBJECT *Object));
  155.  
  156. /* Prototypes for functions defined in spheres.c */
  157. int All_Sphere_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  158. int Intersect_Sphere PARAMS((RAY *Ray, SPHERE *Sphere, DBL *Depth1, DBL *Depth2));
  159. int Inside_Sphere PARAMS((VECTOR *Point, OBJECT *Object));
  160. void Sphere_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *Intersection_Point));
  161. void *Copy_Sphere PARAMS((OBJECT *Object));
  162. void Translate_Sphere PARAMS((OBJECT *Object, VECTOR *Vector));
  163. void Rotate_Sphere PARAMS((OBJECT *Object, VECTOR *Vector));
  164. void Scale_Sphere PARAMS((OBJECT *Object, VECTOR *Vector));
  165. void Invert_Sphere PARAMS((OBJECT *Object));
  166.  
  167. /* Prototypes for functions defined in quadrics.c */
  168. int All_Quadric_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  169. int Intersect_Quadric PARAMS((RAY *Ray, QUADRIC *Shape, DBL *Depth1, DBL *Depth2));
  170. int Inside_Quadric PARAMS((VECTOR *Point, OBJECT *Object));
  171. void Quadric_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *Intersection_Point));
  172. void *Copy_Quadric PARAMS((OBJECT *Object));
  173. void Transform_Quadric PARAMS((QUADRIC *Shape, TRANSFORMATION *Transformation));
  174. void Quadric_To_Matrix PARAMS((QUADRIC *Quadric, MATRIX *Matrix));
  175. void Matrix_To_Quadric PARAMS((MATRIX *Matrix, QUADRIC *Quadric));
  176. void Translate_Quadric PARAMS((OBJECT *Object, VECTOR *Vector));
  177. void Rotate_Quadric PARAMS((OBJECT *Object, VECTOR *Vector));
  178. void Scale_Quadric PARAMS((OBJECT *Object, VECTOR *Vector));
  179. void Invert_Quadric PARAMS((OBJECT *Object));
  180.  
  181. /* Prototypes for functions defined in triangle.c */
  182. void Find_Triangle_Dominant_Axis PARAMS((TRIANGLE *Triangle));
  183. int Compute_Triangle  PARAMS((TRIANGLE *Triangle));
  184. void Compute_Smooth_Triangle  PARAMS((SMOOTH_TRIANGLE *Triangle));
  185. int All_Triangle_Intersections  PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  186. int Intersect_Triangle  PARAMS((RAY *Ray, TRIANGLE *Triangle, DBL *Depth));
  187. int Inside_Triangle  PARAMS((VECTOR *Point, OBJECT *Object));
  188. void Triangle_Normal  PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *Intersection_Point));
  189. void *Copy_Triangle  PARAMS((OBJECT *Object));
  190. void Translate_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  191. void Rotate_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  192. void Scale_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  193. void Invert_Triangle  PARAMS((OBJECT *Object));
  194. void Smooth_Triangle_Normal  PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *Intersection_Point));
  195. void *Copy_Smooth_Triangle PARAMS((OBJECT *Object));
  196. void Rotate_Smooth_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  197.  
  198.  
  199. /* Prototypes for functions defined in lighting.c */
  200. void Colour_At PARAMS((COLOUR *Colour, OBJECT *Object, VECTOR *Intersection_Point));
  201. void Perturb_Normal PARAMS((VECTOR *New_Normal, OBJECT *Object, VECTOR *Intersection_Point,
  202.                     VECTOR *Surface_Normal));
  203. void Ambient PARAMS((OBJECT *Object, VECTOR *Intersection_Point, COLOUR *Surface_Colour,
  204.              COLOUR *Colour));
  205. void Diffuse PARAMS((OBJECT *Object, VECTOR *Intersection_Point, RAY *Eye, VECTOR *Surface_Normal,
  206.              COLOUR *Surface_Colour, COLOUR *Colour));
  207. void Transmit PARAMS((OBJECT *Object, VECTOR *Intersection_Point, RAY *Ray,
  208.               VECTOR *Surface_Normal, COLOUR *Surface_Colour, COLOUR *Colour));
  209. void Reflect PARAMS((OBJECT *Object, VECTOR *Intersection_Point, RAY *Ray, 
  210.              VECTOR *Surface_Normal, COLOUR *Colour));
  211. void Refract PARAMS((OBJECT *Object, VECTOR *Intersection_Point, RAY *Ray,
  212.              VECTOR *Surface_Normal, COLOUR *Colour));
  213. void Fog PARAMS((DBL Distance, COLOUR *Fog_Colour, DBL Fog_Distance, COLOUR *Colour));
  214.  
  215. /* Prototypes for functions defined in prioq.c */
  216. void pq_init PARAMS((void));
  217. PRIOQ *pq_alloc PARAMS((void));
  218. void pq_free PARAMS((PRIOQ *pq));
  219. PRIOQ *pq_new PARAMS((int index_size));
  220. void pq_balance PARAMS((PRIOQ *q, unsigned int entry_pos1));
  221. void pq_add PARAMS((PRIOQ *q, INTERSECTION *entry));
  222. INTERSECTION *pq_get_highest PARAMS((PRIOQ *q));
  223. int pq_is_empty PARAMS((PRIOQ *q));
  224. void pq_delete_highest PARAMS((PRIOQ *q));
  225.  
  226. /* Prototypes for functions defined in texture.c */
  227. void Compute_Colour PARAMS((COLOUR *Colour, COLOUR_MAP *Colour_Map, DBL value));
  228. void Initialize_Noise PARAMS((void));
  229. void InitTextureTable PARAMS((void));
  230. void InitRTable PARAMS((void));
  231. int R PARAMS((VECTOR *v));
  232. int Crc16 PARAMS((char *buf, int count));
  233. DBL Noise PARAMS((DBL x, DBL y, DBL z));
  234. void DNoise PARAMS((VECTOR *result, DBL x, DBL y, DBL z));
  235. DBL cycloidal PARAMS((DBL value));
  236. DBL Triangle_Wave PARAMS((DBL value));
  237. DBL Turbulence PARAMS((DBL x, DBL y, DBL z));
  238. void DTurbulence PARAMS((VECTOR *result, DBL x, DBL y, DBL z));
  239. int Bozo PARAMS((DBL x, DBL y, DBL z, OBJECT *Object, COLOUR *Colour));
  240. int marble PARAMS((DBL x, DBL y, DBL z, OBJECT *Object, COLOUR *colour));
  241. void ripples PARAMS((DBL x, DBL y, DBL z, OBJECT *Object, VECTOR *Vector));
  242. void waves PARAMS((DBL x, DBL y, DBL z, OBJECT *Object, VECTOR *Vector));
  243. int wood PARAMS((DBL x, DBL y, DBL z, OBJECT *Object, COLOUR *colour));
  244. void checker PARAMS((DBL x, DBL y, DBL z, OBJECT *Object, COLOUR *colour));
  245. void spotted PARAMS((DBL x, DBL y, DBL z, OBJECT *Object, COLOUR *Colour));
  246. void bumps PARAMS((DBL x, DBL y, DBL z, OBJECT *Object, VECTOR *normal));
  247. void dents PARAMS((DBL x, DBL y, DBL z, OBJECT *Object, VECTOR *normal));
  248. void agate PARAMS((DBL x, DBL y, DBL z, OBJECT *Object, COLOUR *colour));
  249. void wrinkles PARAMS((DBL x, DBL y, DBL z, OBJECT *Object, VECTOR *normal));
  250. void granite PARAMS((DBL x, DBL y, DBL z, OBJECT *Object, COLOUR *Colour));
  251. void gradient PARAMS((DBL x, DBL y, DBL z, OBJECT *Object, COLOUR *Colour));
  252. void texture_map PARAMS((DBL x, DBL y, DBL z, OBJECT *Object, COLOUR *colour));
  253.  
  254. /* Prototypes for functions defined in csg.c */
  255. int All_CSG_Union_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  256. int All_CSG_Intersection_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue)); 
  257. int All_CSG_Difference_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  258. int Inside_CSG_Union PARAMS((VECTOR *Point, OBJECT *Object));
  259. int Inside_CSG_Intersection PARAMS((VECTOR *Point, OBJECT *Object));
  260. void *Copy_CSG PARAMS((OBJECT *Object));
  261. void Translate_CSG PARAMS((OBJECT *Object, VECTOR *Vector));
  262. void Rotate_CSG PARAMS((OBJECT *Object, VECTOR *Vector));
  263. void Scale_CSG PARAMS((OBJECT *Object, VECTOR *Vector));
  264. void Invert_CSG PARAMS((OBJECT *Object)); 
  265.  
  266. /* Prototypes for functions defined in colour.c */
  267. DBL Colour_Distance PARAMS((COLOUR *colour1, COLOUR *colour2));
  268. void Add_Colour PARAMS((COLOUR *result, COLOUR *colour1, COLOUR *colour2));
  269. void Scale_Colour PARAMS((COLOUR *result, COLOUR *colour, DBL factor));
  270. void Clip_Colour PARAMS((COLOUR *result, COLOUR *colour)); 
  271.  
  272. /* Prototypes for functions defined in viewpnt.c */
  273. void *Copy_Viewpoint PARAMS((OBJECT *Object));
  274. void Translate_Viewpoint PARAMS((OBJECT *Object, VECTOR *Vector));
  275. void Rotate_Viewpoint PARAMS((OBJECT *Object, VECTOR *Vector));
  276. void Scale_Viewpoint PARAMS((OBJECT *Object, VECTOR *Vector));
  277.  
  278. /* Prototypes for functions defined in ray.c */
  279. void Make_Ray PARAMS((RAY *r));
  280. void Initialize_Ray_Containers PARAMS((RAY *Ray));
  281. void Copy_Ray_Containers PARAMS((RAY *Dest_Ray, RAY *Source_Ray));
  282. void Ray_Enter PARAMS((RAY *ray, OBJECT *object));
  283. void Ray_Exit PARAMS((RAY *ray));
  284.  
  285. /* Prototypes for functions defined in planes.c */
  286. int All_Plane_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  287. int Intersect_Plane PARAMS((RAY *Ray, PLANE *Plane, DBL *Depth));
  288. int Inside_Plane PARAMS((VECTOR *Point, OBJECT *Object));
  289. void Plane_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *Intersection_Point));
  290. void *Copy_Plane PARAMS((OBJECT *Object));
  291. void Translate_Plane PARAMS((OBJECT *Object, VECTOR *Vector));
  292. void Rotate_Plane PARAMS((OBJECT *Object, VECTOR *Vector));
  293. void Scale_Plane PARAMS((OBJECT *Object, VECTOR *Vector));
  294. void Invert_Plane PARAMS((OBJECT *Object));
  295.  
  296. /* Prototypes for functions defined in raw.c */
  297. int read_raw_byte PARAMS((FILE *f));
  298. int read_raw_word PARAMS((FILE *f));
  299. void read_raw_image PARAMS((IMAGE *Image, char *filename));
  300.  
  301. /* Prototypes for functions defined in iff.c */
  302. void iff_error PARAMS((void));
  303. int read_byte PARAMS((FILE *f));
  304. int read_word PARAMS((FILE *f));
  305. long read_long PARAMS((FILE *f));
  306. void Read_Chunk_Header PARAMS((FILE *f, CHUNK_HEADER *dest)); 
  307. void read_iff_image PARAMS((IMAGE *Image, char *filename));
  308.  
  309. /* Prototypes for functions defined in gif.c */
  310. int out_line PARAMS((char *pixels, int linelen));
  311. int get_byte PARAMS((void));
  312. void read_gif_image PARAMS((IMAGE *Image, char *filename));
  313.  
  314. /* Prototypes for functions defined in gifdecod.c */
  315. short init_exp PARAMS((short size));
  316. short get_next_code PARAMS((void));
  317. short decoder PARAMS((short linewidth));
  318.  
  319. /* Prototypes for functions defined in amiga.c */
  320. void display_finished PARAMS((void));
  321. void display_init PARAMS((void));
  322. void display_close PARAMS((void));
  323. void display_plot PARAMS((int x, int y, char Red, char Green, char Blue));
  324.  
  325. /* Prototypes for functions defined in matrices.c */
  326. void MZero PARAMS((MATRIX *result));
  327. void MIdentity PARAMS((MATRIX *result));
  328. void MTimes PARAMS((MATRIX *result, MATRIX *matrix1, MATRIX *matrix2));
  329. void MAdd PARAMS((MATRIX *result, MATRIX *matrix1, MATRIX *matrix2));
  330. void MSub PARAMS((MATRIX *result, MATRIX *matrix1, MATRIX *matrix2));
  331. void MScale PARAMS((MATRIX *result, MATRIX *matrix1, DBL amount));
  332. void MTranspose PARAMS((MATRIX *result, MATRIX *matrix1));
  333. void MTransformVector PARAMS((VECTOR *result, VECTOR *vector, TRANSFORMATION *transformation));
  334. void MInverseTransformVector PARAMS((VECTOR *result, VECTOR *vector, TRANSFORMATION *transformation));
  335. void Get_Scaling_Transformation PARAMS((TRANSFORMATION *result, VECTOR *vector));
  336. void Get_Inversion_Transformation PARAMS((TRANSFORMATION *result));
  337. void Get_Translation_Transformation PARAMS((TRANSFORMATION *transformation, VECTOR *vector));
  338. void Get_Rotation_Transformation PARAMS((TRANSFORMATION *transformation, VECTOR *vector));
  339. void Get_Look_At_Transformation PARAMS((TRANSFORMATION *transformation, VECTOR *Look_At, VECTOR *Up, VECTOR *Right));
  340. void Compose_Transformations PARAMS((TRANSFORMATION *Original_Transformation, TRANSFORMATION *New_Transformation));
  341.