home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / mac / developm / source / povsrc.sit / SOURCE / POVPROTO.H < prev    next >
Encoding:
Text File  |  1992-07-03  |  24.5 KB  |  465 lines

  1. /****************************************************************************
  2. *                   povproto.h
  3. *
  4. *  This module defines the prototypes for all system-independent functions.
  5. *
  6. *  from Persistence of Vision Raytracer 
  7. *  Copyright 1992 Persistence of Vision Team
  8. *---------------------------------------------------------------------------
  9. *  Copying, distribution and legal info is in the file povlegal.doc which
  10. *  should be distributed with this file. If povlegal.doc is not available
  11. *  or for more info please contact:
  12. *
  13. *       Drew Wells [POV-Team Leader] 
  14. *       CIS: 73767,1244  Internet: 73767.1244@compuserve.com
  15. *       Phone: (213) 254-4041
  16. * This program is based on the popular DKB raytracer version 2.12.
  17. * DKBTrace was originally written by David K. Buck.
  18. * DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
  19. *
  20. *****************************************************************************/
  21.  
  22.  
  23. /* Prototypes for functions defined in povray.c */
  24. void usage PARAMS((void));
  25. void init_vars PARAMS((void));
  26. void close_all PARAMS((void));
  27. void get_defaults PARAMS((void));
  28. void read_options PARAMS((char *file_name));
  29. void parse_option PARAMS((char *Option_String));
  30. void parse_file_name PARAMS((char *File_Name));
  31. void Print_Options PARAMS((void));
  32. void print_stats PARAMS((void));
  33. void print_credits PARAMS((void));
  34. FILE *Locate_File PARAMS((char *filename, char *mode));
  35.  
  36. /* Prototypes for functions defined in render.c */
  37. void Read_Rendered_Part PARAMS((void));
  38. void Create_Ray PARAMS((RAY *ray, int width, int height, DBL x, DBL y));
  39. void Supersample PARAMS((COLOUR *result, int x, int y, int Width,int Height));
  40. void Start_Tracing PARAMS((void));
  41. void Trace PARAMS((RAY *Ray, COLOUR *Colour));
  42. void Initialize_Renderer PARAMS((void));
  43.  
  44. /* Prototypes for functions defined in tokenize.c */
  45. void Initialize_Tokenizer PARAMS((char *Input_File_Name));
  46. void Terminate_Tokenizer PARAMS((void));
  47. void Tokenize PARAMS((char *name));
  48. int Process_Token PARAMS((void));
  49. int Skip_Spaces PARAMS((DATA_FILE *Data_File));
  50. int Parse_Comments PARAMS((DATA_FILE *Data_File));
  51. int Parse_C_Comments PARAMS((DATA_FILE *Data_File));
  52.  
  53. void Begin_String PARAMS((void));
  54. void Stuff_Character PARAMS((int c, DATA_FILE *Data_File));
  55. void End_String PARAMS((DATA_FILE *Data_File));
  56. int Read_Float PARAMS((DATA_FILE *Data_File));
  57. void Parse_String PARAMS((DATA_FILE *Data_File));
  58. int Read_Symbol PARAMS((DATA_FILE *Data_File));
  59. int Find_Reserved PARAMS((void));
  60. int Find_Symbol PARAMS((void));
  61. void Write_Token PARAMS((int Token_Id, DATA_FILE *Data_File));
  62. void Token_Error PARAMS((DATA_FILE *Data_File, char *str));
  63. void Get_Token PARAMS((void));
  64. void Unget_Token PARAMS((void));
  65.  
  66. /* Prototypes for functions defined in parse.c */
  67. void Parse PARAMS((FRAME *Frame_Ptr));
  68. void Token_Init PARAMS((void));
  69. void Frame_Init PARAMS((void));
  70. COMPOSITE *Get_Composite_Object PARAMS((void));
  71. LIGHT_SHAPE *Get_Light_Source_Shape PARAMS((void));
  72. SPHERE *Get_Sphere_Shape PARAMS((void));
  73. QUADRIC *Get_Quadric_Shape PARAMS((void));
  74. POLY *Get_Poly_Shape PARAMS((int));
  75. BOX *Get_Box_Shape PARAMS((void));
  76. BLOB *Get_Blob_Shape PARAMS((void));
  77. BICUBIC_PATCH *Get_Bicubic_Patch_Shape PARAMS((void));
  78. HEIGHT_FIELD *Get_Height_Field_Shape PARAMS((void));
  79. PLANE *Get_Plane_Shape PARAMS((void));
  80. TRIANGLE *Get_Triangle_Shape PARAMS((void));
  81. SMOOTH_TRIANGLE *Get_Smooth_Triangle_Shape PARAMS((void));
  82. CSG_SHAPE *Get_CSG_Shape PARAMS((void));
  83. CSG_SHAPE *Get_CSG_Union PARAMS((void));
  84. CSG_SHAPE *Get_CSG_Intersection PARAMS((void));
  85. OBJECT *Get_Object PARAMS((void));
  86. TEXTURE *Get_Texture PARAMS((void));
  87. VIEWPOINT *Get_Viewpoint PARAMS((void));
  88. COLOUR *Get_Colour PARAMS((void));
  89. VECTOR *Get_Vector PARAMS((void));
  90. DBL *Get_Float PARAMS((void));
  91. TRANSFORMATION *Get_Transformation PARAMS((void));
  92. DBL Parse_Float PARAMS((void));
  93. void Parse_Vector PARAMS((VECTOR *Given_Vector));
  94. void Parse_Coeffs PARAMS((int order, DBL *Given_Coeffs));
  95. void Parse_Colour PARAMS((COLOUR *Given_Colour));
  96. COLOUR_MAP *Parse_Colour_Map PARAMS((void));
  97. TEXTURE *Copy_Texture PARAMS((TEXTURE *Texture));
  98. TEXTURE *Parse_Texture PARAMS((void));
  99. SHAPE *Parse_Sphere PARAMS((void));
  100. SHAPE *Parse_Light_Source PARAMS((void));
  101.  
  102. SHAPE *Parse_Plane PARAMS((void));
  103. SHAPE *Parse_Triangle PARAMS((void));
  104. SHAPE *Parse_Smooth_Triangle PARAMS((void));
  105. SHAPE *Parse_Quadric PARAMS((void));
  106. SHAPE *Parse_Poly PARAMS((int));
  107. SHAPE *Parse_Box PARAMS((void));
  108. SHAPE *Parse_Blob PARAMS((void));
  109. SHAPE *Parse_Bicubic_Patch PARAMS((void));
  110. SHAPE *Parse_Height_Field PARAMS((void));
  111. CSG_SHAPE *Parse_CSG PARAMS((int type, OBJECT *Parent_Object));
  112. SHAPE *Parse_Shape PARAMS((OBJECT *Object));
  113. OBJECT *Parse_Object PARAMS((void));
  114. OBJECT *Parse_Composite PARAMS((void));
  115. void Parse_Fog PARAMS((void));
  116. void Parse_Frame PARAMS((void));
  117. void Parse_Viewpoint PARAMS((VIEWPOINT *Given_Vp));
  118. void Parse_Declare PARAMS((void));
  119. void Init_Viewpoint PARAMS((VIEWPOINT *vp));
  120. void Link PARAMS((OBJECT *New_Object,OBJECT **Field,OBJECT **Old_Object_List));
  121. CONSTANT Find_Constant PARAMS((void));
  122. char *Get_Token_String PARAMS((TOKEN Token_Id));
  123. void Parse_Error PARAMS((TOKEN Token_Id));
  124. void Type_Error PARAMS((void));
  125. void Undeclared PARAMS((void));
  126. void Error PARAMS((char *str));
  127.  
  128. /* Prototypes for functions defined in objects.c */
  129. INTERSECTION *Object_Intersect PARAMS((OBJECT *Object, RAY *Ray));
  130. int All_Composite_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  131. int All_Object_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  132. int Inside_Basic_Object PARAMS((VECTOR *point, OBJECT *Object)); 
  133. int Inside_Composite_Object PARAMS((VECTOR *point, OBJECT *Object));
  134. void *Copy_Basic_Object PARAMS((OBJECT *Object));
  135. void *Copy_Composite_Object PARAMS((OBJECT *Object));
  136. void Translate_Basic_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  137. void Rotate_Basic_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  138. void Scale_Basic_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  139. void Translate_Composite_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  140. void Rotate_Composite_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  141. void Scale_Composite_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  142. void Invert_Basic_Object PARAMS((OBJECT *Object));
  143. void Invert_Composite_Object PARAMS((OBJECT *Object));
  144.  
  145. /* Prototypes for functions defined in spheres.c */
  146. int All_Sphere_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  147. int Intersect_Sphere PARAMS((RAY *Ray, SPHERE *Sphere, DBL *Depth1, DBL *Depth2));
  148. int Inside_Sphere PARAMS((VECTOR *point, OBJECT *Object));
  149. void Sphere_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *Intersection_Point));
  150. void *Copy_Sphere PARAMS((OBJECT *Object));
  151. void Translate_Sphere PARAMS((OBJECT *Object, VECTOR *Vector));
  152. void Rotate_Sphere PARAMS((OBJECT *Object, VECTOR *Vector));
  153. void Scale_Sphere PARAMS((OBJECT *Object, VECTOR *Vector));
  154. void Invert_Sphere PARAMS((OBJECT *Object));
  155.  
  156. /* Prototypes for functions defined in point.c */
  157. int All_Point_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  158. int Inside_Point PARAMS((VECTOR *Test_Point, OBJECT *Object));
  159. void *Copy_Point PARAMS((OBJECT *Object));
  160. void Translate_Point PARAMS((OBJECT *Object, VECTOR *Vector));
  161. void Rotate_Point PARAMS((OBJECT *Object, VECTOR *Vector));
  162. void Scale_Point PARAMS((OBJECT *Object, VECTOR *Vector));
  163. void Invert_Point PARAMS((OBJECT *Object));
  164. DBL Attenuate_Light PARAMS((LIGHT_SHAPE *Light_Source, RAY *Light_Source_Ray));
  165.  
  166. /* Prototypes for functions defined in quadrics.c */
  167. int All_Quadric_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  168. int Intersect_Quadric PARAMS((RAY *Ray, QUADRIC *Shape, DBL *Depth1, DBL *Depth2));
  169. int Inside_Quadric PARAMS((VECTOR *point, OBJECT *Object));
  170. void Quadric_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *Intersection_Point));
  171. void *Copy_Quadric PARAMS((OBJECT *Object));
  172. void Transform_Quadric PARAMS((QUADRIC *Shape, TRANSFORMATION *Transformation));
  173. void Quadric_To_Matrix PARAMS((QUADRIC *Quadric, MATRIX *Matrix));
  174. void Matrix_To_Quadric PARAMS((MATRIX *Matrix, QUADRIC *Quadric));
  175. void Translate_Quadric PARAMS((OBJECT *Object, VECTOR *Vector));
  176. void Rotate_Quadric PARAMS((OBJECT *Object, VECTOR *Vector));
  177. void Scale_Quadric PARAMS((OBJECT *Object, VECTOR *Vector));
  178. void Invert_Quadric PARAMS((OBJECT *Object));
  179.  
  180. /* Prototypes for functions defined in poly.c */
  181. int All_Poly_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  182. int Inside_Poly PARAMS((VECTOR *point, OBJECT *Object));
  183. void Poly_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *Intersection_Point));
  184. void *Copy_Poly PARAMS((OBJECT *Object));
  185. void Translate_Poly PARAMS((OBJECT *Object, VECTOR *Vector));
  186. void Rotate_Poly PARAMS((OBJECT *Object, VECTOR *Vector));
  187. void Scale_Poly PARAMS((OBJECT *Object, VECTOR *Vector));
  188. void Invert_Poly PARAMS((OBJECT *Object));
  189.  
  190. /* Prototypes for functions defined in bezier.c */
  191. void Precompute_Patch_Values PARAMS((BICUBIC_PATCH *Shape));
  192. int All_Bicubic_Patch_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  193. int Inside_Bicubic_Patch PARAMS((VECTOR *point, OBJECT *Object));
  194. void Bicubic_Patch_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *Intersection_Point));
  195. void *Copy_Bicubic_Patch PARAMS((OBJECT *Object));
  196. void Translate_Bicubic_Patch PARAMS((OBJECT *Object, VECTOR *Vector));
  197. void Rotate_Bicubic_Patch PARAMS((OBJECT *Object, VECTOR *Vector));
  198. void Scale_Bicubic_Patch PARAMS((OBJECT *Object, VECTOR *Vector));
  199. void Invert_Bicubic_Patch PARAMS((OBJECT *Object));
  200.  
  201. /* Prototypes for functions defined in boxes.c */
  202. int All_Box_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  203. int Intersect_Boxx PARAMS((RAY *Ray, BOX *box, DBL *Depth1, DBL *Depth2));
  204. int Inside_Box PARAMS((VECTOR *point, OBJECT *Object));
  205. void Box_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *Intersection_Point));
  206. void *Copy_Box PARAMS((OBJECT *Object));
  207. void Translate_Box PARAMS((OBJECT *Object, VECTOR *Vector));
  208. void Rotate_Box PARAMS((OBJECT *Object, VECTOR *Vector));
  209. void Scale_Box PARAMS((OBJECT *Object, VECTOR *Vector));
  210. void Invert_Box PARAMS((OBJECT *Object));
  211.  
  212. /* Prototypes for functions defined in blob.c */
  213. void MakeBlob PARAMS((OBJECT *obj, DBL threshold, blobstackptr bloblist,
  214. int npoints, int sflag));
  215. int All_Blob_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  216. int Inside_Blob PARAMS((VECTOR *point, OBJECT *Object));
  217. void Blob_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *Intersection_Point));
  218. void *Copy_Blob PARAMS((OBJECT *Object));
  219. void Translate_Blob PARAMS((OBJECT *Object, VECTOR *Vector));
  220. void Rotate_Blob PARAMS((OBJECT *Object, VECTOR *Vector));
  221. void Scale_Blob PARAMS((OBJECT *Object, VECTOR *Vector));
  222. void Invert_Blob PARAMS((OBJECT *Object));
  223.  
  224. /* Prototypes for functions defined in hfield.c */
  225. void Find_Hf_Min_Max PARAMS((HEIGHT_FIELD *H_Field, IMAGE *Image, int Image_Type));
  226. int Intersect_Pixel PARAMS((int x,int z,RAY *Ray,HEIGHT_FIELD *H_Field,DBL height1,DBL height2));
  227. int Intersect_Sub_Block PARAMS((HF_BLOCK *Block, RAY *Ray, HEIGHT_FIELD *H_Field,
  228. VECTOR *start, VECTOR *end));
  229. int Intersect_Hf_Node PARAMS((RAY *Ray, HEIGHT_FIELD *H_Field, VECTOR *start, VECTOR *end));
  230. int All_HeightFld_Intersections PARAMS((OBJECT *Object,RAY *Ray,PRIOQ *Depth_Queue));
  231. int Intersect_HeightFld PARAMS((RAY *Ray,HEIGHT_FIELD *H_Field,DBL *Depth));
  232. int Inside_HeightFld PARAMS((VECTOR *Test_Point,OBJECT *Object));
  233. void HeightFld_Normal PARAMS((VECTOR *Result,OBJECT *Object,VECTOR *Intersection_Point));
  234. void *Copy_HeightFld PARAMS((OBJECT *Object));
  235. void Translate_HeightFld PARAMS((OBJECT *Object,VECTOR *Vector));
  236. void Rotate_HeightFld PARAMS((OBJECT *Object,VECTOR *Vector));
  237. void Scale_HeightFld PARAMS((OBJECT *Object,VECTOR *Vector));
  238. void Invert_HeightFld PARAMS((OBJECT *Object));
  239.  
  240. /* Prototypes for functions defined in triangle.c */
  241. void Find_Triangle_Dominant_Axis PARAMS((TRIANGLE *Triangle));
  242. int Compute_Triangle  PARAMS((TRIANGLE *Triangle));
  243. void Compute_Smooth_Triangle  PARAMS((SMOOTH_TRIANGLE *Triangle));
  244. int All_Triangle_Intersections  PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  245. int Intersect_Triangle  PARAMS((RAY *Ray, TRIANGLE *Triangle, DBL *Depth));
  246. int Inside_Triangle  PARAMS((VECTOR *point, OBJECT *Object));
  247. void Triangle_Normal  PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *Intersection_Point));
  248. void *Copy_Triangle  PARAMS((OBJECT *Object));
  249. void Translate_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  250. void Rotate_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  251. void Scale_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  252. void Invert_Triangle  PARAMS((OBJECT *Object));
  253. void Smooth_Triangle_Normal  PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *Intersection_Point));
  254. void *Copy_Smooth_Triangle PARAMS((OBJECT *Object));
  255. void Translate_Smooth_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  256. void Rotate_Smooth_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  257. void Scale_Smooth_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  258. void Invert_Smooth_Triangle  PARAMS((OBJECT *Object));
  259.  
  260. /* Prototypes for functions defined in vect.c */
  261. int solve_quadratic PARAMS((DBL *x, DBL *y));
  262. int solve_cubic PARAMS((DBL *x, DBL *y));
  263. int solve_quartic PARAMS((DBL *x, DBL *y));
  264. int polysolve PARAMS((int order, DBL *Coeffs, DBL *roots));
  265.  
  266. /* Prototypes for functions defined in lighting.c */
  267. void Colour_At PARAMS((COLOUR *Colour, TEXTURE *Texture, VECTOR *Intersection_Point));
  268. void Perturb_Normal PARAMS((VECTOR *New_Normal, TEXTURE *Texture, VECTOR *Intersection_Point, VECTOR *Surface_Normal));
  269. void Ambient PARAMS((TEXTURE *Texture, COLOUR *Surface_Colour, COLOUR *Colour, DBL Attenuation));
  270. void Diffuse PARAMS((TEXTURE *Texture, VECTOR *Intersection_Point, RAY *Eye, VECTOR *Surface_Normal, COLOUR *Surface_Colour, COLOUR *Colour,DBL Attenuation));
  271. void Reflect PARAMS((TEXTURE *Texture, VECTOR *Intersection_Point, RAY *Ray, VECTOR *Surface_Normal, COLOUR *Colour));
  272. void Refract PARAMS((TEXTURE *Texture, VECTOR *Intersection_Point, RAY *Ray, VECTOR *Surface_Normal, COLOUR *Colour));
  273. void Fog PARAMS((DBL Distance, COLOUR *Fog_Colour, DBL Fog_Distance, COLOUR *Colour));
  274. void Compute_Reflected_Colour PARAMS ((RAY *Ray, TEXTURE *Texture, INTERSECTION *Ray_Intersection, COLOUR *Surface_Colour, COLOUR *Filter_Colour,COLOUR *Colour));
  275. void Determine_Surface_Colour PARAMS ((INTERSECTION *Ray_Intersection, COLOUR *Colour, RAY *Ray, int Shadow_Ray));
  276.  
  277. /* Prototypes for functions defined in prioq.c */
  278. void pq_init PARAMS((void));
  279. PRIOQ *pq_alloc PARAMS((void));
  280. void pq_free PARAMS((PRIOQ *pq));
  281. PRIOQ *pq_new PARAMS((int index_size));
  282. void pq_balance PARAMS((PRIOQ *q, unsigned int entry_pos1));
  283. void pq_add PARAMS((PRIOQ *q, INTERSECTION *queue_entry));
  284. INTERSECTION *pq_get_highest PARAMS((PRIOQ *q));
  285. int pq_is_empty PARAMS((PRIOQ *q));
  286. void pq_delete_highest PARAMS((PRIOQ *q));
  287.  
  288. /* Prototypes for functions defined in texture.c */
  289. void Compute_Colour PARAMS((COLOUR *Colour,COLOUR_MAP *Colour_Map,DBL value));
  290. void Initialize_Noise PARAMS((void));
  291. void InitTextureTable PARAMS((void));
  292. void InitRTable PARAMS((void));
  293. int R PARAMS((VECTOR *v));
  294. int Crc16 PARAMS((char *buf, int count));
  295. void setup_lattice PARAMS((DBL *x, DBL *y, DBL *z, long *ix, long *iy, long *iz, long *jx, long *jy, long *jz, DBL *sx, DBL *sy, DBL *sz, DBL *tx, DBL *ty, DBL *tz));
  296. DBL Noise PARAMS((DBL x, DBL y, DBL z));
  297. void DNoise PARAMS((VECTOR *result, DBL x, DBL y, DBL z));
  298. DBL cycloidal PARAMS((DBL value));
  299. DBL Triangle_Wave PARAMS((DBL value));
  300. DBL Turbulence PARAMS((DBL x, DBL y, DBL z, int octaves));
  301. void DTurbulence PARAMS((VECTOR *result, DBL x, DBL y, DBL z, int octaves));
  302. void Translate_Texture PARAMS((TEXTURE **Texture_Ptr, VECTOR *Vector));
  303. void Rotate_Texture PARAMS((TEXTURE **Texture_Ptr, VECTOR *Vector));
  304. void Scale_Texture PARAMS((TEXTURE **Texture_Ptr, VECTOR *Vector));
  305.  
  306.  
  307. /* Prototypes for functions defined in txtcolor.c */
  308. void agate PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *colour));
  309. void bozo PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *colour));
  310. void brick PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *colour));
  311. void checker PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *colour));
  312. void checker_texture PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *colour));
  313. void gradient PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *colour));
  314. void granite PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *colour));
  315. void marble PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *colour));
  316. void spotted PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *colour));
  317. void wood PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *colour));
  318. /* Two new textures from Scott Taylor ONION & LEOPARD 7/18/91*/
  319. void leopard PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *colour));   /* SWT 7/18/91 */
  320. void onion PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *colour));
  321.  
  322. /* Prototypes for functions defined in txtbump.c */
  323. void bumps PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, VECTOR *normal));
  324. void dents PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, VECTOR *normal));
  325. void ripples PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, VECTOR *Vector));
  326. void waves PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, VECTOR *Vector));
  327. void wrinkles PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, VECTOR *normal));
  328.  
  329.  
  330. /* Prototypes for functions defined in txttest.c */
  331. void painted1 PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *colour)); /* CdW 7/2/91 */
  332. void painted2 PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *colour)); /* CdW 7/2/91 */
  333. void painted3 PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *colour)); /* CdW 7/2/91 */
  334. void bumpy1 PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, VECTOR *normal)); /* CdW 7/2/91*/
  335. void bumpy2 PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, VECTOR *normal)); /* CdW 7/2/91*/
  336. void bumpy3 PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, VECTOR *normal)); /* CdW 7/2/91*/
  337.  
  338. /* Prototypes for functions defined in txtmap.c */
  339. int map PARAMS((DBL x,DBL y,DBL z,TEXTURE *Texture,IMAGE *Image,DBL *xcoor, DBL *ycoor));
  340. void image_map PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *colour));
  341. TEXTURE *material_map PARAMS((VECTOR *Intersection_Point, TEXTURE *Texture));
  342. void bump_map PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, VECTOR *normal));/* CdW 7/8/91*/
  343.  
  344.  
  345. /* Prototypes for functions defined in csg.c */
  346. int All_CSG_Union_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  347. int All_CSG_Intersect_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue)); 
  348. int Inside_CSG_Union PARAMS((VECTOR *point, OBJECT *Object));
  349. int Inside_CSG_Intersection PARAMS((VECTOR *point, OBJECT *Object));
  350. void *Copy_CSG PARAMS((OBJECT *Object));
  351. void Translate_CSG PARAMS((OBJECT *Object, VECTOR *Vector));
  352. void Rotate_CSG PARAMS((OBJECT *Object, VECTOR *Vector));
  353. void Scale_CSG PARAMS((OBJECT *Object, VECTOR *Vector));
  354. void Invert_CSG PARAMS((OBJECT *Object)); 
  355. void Set_CSG_Parents PARAMS((CSG_SHAPE *, OBJECT *));
  356.  
  357. /* Prototypes for functions defined in colour.c */
  358. DBL Colour_Distance PARAMS((COLOUR *colour1, COLOUR *colour2));
  359. void Add_Colour PARAMS((COLOUR *result, COLOUR *colour1, COLOUR *colour2));
  360. void Scale_Colour PARAMS((COLOUR *result, COLOUR *colour, DBL factor));
  361. void Clip_Colour PARAMS((COLOUR *result, COLOUR *colour)); 
  362.  
  363. /* Prototypes for functions defined in viewpnt.c */
  364. void *Copy_Viewpoint PARAMS((OBJECT *Object));
  365. void Translate_Viewpoint PARAMS((OBJECT *Object, VECTOR *Vector));
  366. void Rotate_Viewpoint PARAMS((OBJECT *Object, VECTOR *Vector));
  367. void Scale_Viewpoint PARAMS((OBJECT *Object, VECTOR *Vector));
  368.  
  369. /* Prototypes for functions defined in ray.c */
  370. void Make_Ray PARAMS((RAY *r));
  371. void Initialize_Ray_Containers PARAMS((RAY *Ray));
  372. void Copy_Ray_Containers PARAMS((RAY *Dest_Ray, RAY *Source_Ray));
  373. void Ray_Enter PARAMS((RAY *ray, TEXTURE *texture));
  374. void Ray_Exit PARAMS((RAY *ray));
  375.  
  376. /* Prototypes for functions defined in planes.c */
  377. int All_Plane_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  378. int Intersect_Plane PARAMS((RAY *Ray, PLANE *Plane, DBL *Depth));
  379. int Inside_Plane PARAMS((VECTOR *point, OBJECT *Object));
  380. void Plane_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *Intersection_Point));
  381. void *Copy_Plane PARAMS((OBJECT *Object));
  382. void Translate_Plane PARAMS((OBJECT *Object, VECTOR *Vector));
  383. void Rotate_Plane PARAMS((OBJECT *Object, VECTOR *Vector));
  384. void Scale_Plane PARAMS((OBJECT *Object, VECTOR *Vector));
  385. void Invert_Plane PARAMS((OBJECT *Object));
  386.  
  387. /* Prototypes for functions defined in iff.c */
  388. void iff_error PARAMS((void));
  389. int read_byte PARAMS((FILE *f));
  390. int read_word PARAMS((FILE *f));
  391. long read_long PARAMS((FILE *f));
  392. void Read_Chunk_Header PARAMS((FILE *f, CHUNK_HEADER *dest)); 
  393. void Read_Iff_Image PARAMS((IMAGE *Image, char *filename));
  394.  
  395. /* Prototypes for functions defined in gif.c */
  396. int out_line PARAMS((unsigned char *pixels, int linelen));
  397. int get_byte PARAMS((void));
  398. void Read_Gif_Image PARAMS((IMAGE *Image, char *filename));
  399.  
  400. /* Prototypes for functions defined in gifdecod.c */
  401. void cleanup_gif_decoder PARAMS((void));
  402. WORD init_exp PARAMS((int i_size));   /* changed param to int to avoid
  403.                      problems with 32bit int ANSI
  404.                      compilers. */
  405. WORD get_next_code PARAMS((void));
  406. WORD decoder PARAMS((int i_linewidth)); /* same as above */
  407.  
  408. /* Prototypes for machine specific functions defined in "computer".c (ibm.c amiga.c unix.c etc.)*/
  409. void display_finished PARAMS((void));
  410. void display_init PARAMS((int width, int height));
  411. void display_close PARAMS((void));
  412. void display_plot PARAMS((int x, int y, unsigned char Red, unsigned char Green, unsigned char Blue));
  413.  
  414. /* Prototypes for functions defined in matrices.c */
  415. void MZero PARAMS((MATRIX *result));
  416. void MIdentity PARAMS((MATRIX *result));
  417. void MTimes PARAMS((MATRIX *result, MATRIX *matrix1, MATRIX *matrix2));
  418. void MAdd PARAMS((MATRIX *result, MATRIX *matrix1, MATRIX *matrix2));
  419. void MSub PARAMS((MATRIX *result, MATRIX *matrix1, MATRIX *matrix2));
  420. void MScale PARAMS((MATRIX *result, MATRIX *matrix1, DBL amount));
  421. void MTranspose PARAMS((MATRIX *result, MATRIX *matrix1));
  422. void MTransformVector PARAMS((VECTOR *result, VECTOR *vector, TRANSFORMATION *transformation));
  423. void MInverseTransformVector PARAMS((VECTOR *result, VECTOR *vector, TRANSFORMATION *transformation));
  424. void MTransVector PARAMS((VECTOR *result, VECTOR *vector, TRANSFORMATION *transformation));
  425. void MInvTransVector PARAMS((VECTOR *result, VECTOR *vector, TRANSFORMATION *transformation));
  426. void MTransNormal PARAMS((VECTOR *result, VECTOR *vector, TRANSFORMATION *transformation));
  427. void Get_Scaling_Transformation PARAMS((TRANSFORMATION *result, VECTOR *vector));
  428. void Get_Inversion_Transformation PARAMS((TRANSFORMATION *result));
  429. void Get_Translation_Transformation PARAMS((TRANSFORMATION *transformation, VECTOR *vector));
  430. void Get_Rotation_Transformation PARAMS((TRANSFORMATION *transformation, VECTOR *vector));
  431. void Get_Look_At_Transformation PARAMS((TRANSFORMATION *transformation, VECTOR *Look_At, VECTOR *Up, VECTOR *Right));
  432. void Compose_Transformations PARAMS((TRANSFORMATION *Original_Transformation, TRANSFORMATION *New_Transformation));
  433.  
  434. /* Prototypes for functions defined in dump.c */
  435. FILE_HANDLE *Get_Dump_File_Handle PARAMS((void));
  436. char *Default_Dump_File_Name PARAMS((void));
  437. int Open_Dump_File PARAMS((FILE_HANDLE *handle, char *name,
  438. int *width, int *height, int buffer_size, int mode));
  439. void Write_Dump_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int line_number));
  440. int Read_Dump_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int *line_number));
  441. int Read_Dump_Int_Line PARAMS((FILE_HANDLE *handle, IMAGE_LINE *line_data, int *line_number));
  442. void Read_Dump_Image PARAMS((IMAGE *Image, char *filename));
  443. void Close_Dump_File PARAMS((FILE_HANDLE *handle));
  444.  
  445. /* Prototypes for functions defined in targa.c */
  446. FILE_HANDLE *Get_Targa_File_Handle PARAMS((void));
  447. char *Default_Targa_File_Name PARAMS((void));
  448. int Open_Targa_File PARAMS((FILE_HANDLE *handle, char *name,
  449. int *width, int *height, int buffer_size, int mode));
  450. void Write_Targa_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int line_number));
  451. int Read_Targa_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int *line_number));
  452. void Read_Targa_Image PARAMS((IMAGE *Image, char *filename));
  453. void Close_Targa_File PARAMS((FILE_HANDLE *handle));
  454. int Read_Targa_Int_Line PARAMS((FILE_HANDLE *handle,IMAGE_LINE *line_data));
  455.  
  456. /* Prototypes for functions defined in Raw.c */
  457. FILE_HANDLE *Get_Raw_File_Handle PARAMS((void));
  458. char *Default_Raw_File_Name PARAMS((void));
  459. int Open_Raw_File PARAMS((FILE_HANDLE *handle, char *name,
  460. int *width, int *height, int buffer_size, int mode));
  461. void Write_Raw_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int line_number));
  462. int Read_Raw_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int *line_number));
  463. void Close_Raw_File PARAMS((FILE_HANDLE *handle));
  464.