home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / graphics / ftpovstc / povproto.h < prev    next >
C/C++ Source or Header  |  1994-05-25  |  32KB  |  613 lines

  1. /****************************************************************************
  2. *
  3. *  ATTENTION!!!
  4. *
  5. *  THIS FILE HAS BEEN MODIFIED!!! IT IS NOT PART OF THE OFFICAL
  6. *  POV-RAY 2.2 DISTRIBUTION!!!
  7. *
  8. *  THIS FILE IS PART OF "FASTER THAN POV-RAY" (VERSION 1.1),
  9. *  A SPED-UP VERSION OF POV-RAY 2.2. USE AT YOUR OWN RISK!!!!!!
  10. *
  11. *  New files: addon0.c, addon1.c, addon2.c, addon3.c, addon.h
  12. *
  13. *  The additional modules were written by Dieter Bayer.
  14. *
  15. *  Send comments, suggestions, bugs, ideas ... to:
  16. *
  17. *  dieter@cip.e-technik.uni-erlangen.de
  18. *
  19. *  All changed/added lines are enclosed in #ifdef DB_CODE ... #endif
  20. *
  21. *  The vista projection was taken from:
  22. *
  23. *    A. Hashimoto, T. Akimoto, K. Mase, and Y. Suenaga, 
  24. *    "Vista Ray-Tracing: High Speed Ray Tracing Using Perspective
  25. *    Projection Image", New Advances in Computer Graphics, Proceedings
  26. *    of CG International '89, R. A. Earnshaw, B. Wyvill (Eds.), 
  27. *    Springer, ..., pp. 549-560
  28. *
  29. *  The idea for the light buffer was taken from:
  30. *
  31. *    E. Haines and D. Greenberg, "The Light Buffer: A Shadow-Testing 
  32. *    Accelerator", IEEE CG&A, Vol. 6, No. 9, Sept. 1986, pp. 6-16
  33. *
  34. *****************************************************************************/
  35.  
  36. /****************************************************************************
  37. *                   povproto.h
  38. *
  39. *  This module defines the prototypes for all system-independent functions.
  40. *
  41. *  from Persistence of Vision Raytracer
  42. *  Copyright 1993 Persistence of Vision Team
  43. *---------------------------------------------------------------------------
  44. *  NOTICE: This source code file is provided so that users may experiment
  45. *  with enhancements to POV-Ray and to port the software to platforms other
  46. *  than those supported by the POV-Ray Team.  There are strict rules under
  47. *  which you are permitted to use this file.  The rules are in the file
  48. *  named POVLEGAL.DOC which should be distributed with this file. If 
  49. *  POVLEGAL.DOC is not available or for more info please contact the POV-Ray
  50. *  Team Coordinator by leaving a message in CompuServe's Graphics Developer's
  51. *  Forum.  The latest version of POV-Ray may be found there as well.
  52. *
  53. * This program is based on the popular DKB raytracer version 2.12.
  54. * DKBTrace was originally written by David K. Buck.
  55. * DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
  56. *
  57. *****************************************************************************/
  58.  
  59. /* Prototypes for functions defined in povray.c */
  60. void usage PARAMS((void));
  61. void init_vars PARAMS((void));
  62. void close_all PARAMS((void));
  63. void get_defaults PARAMS((void));
  64. void read_options PARAMS((char *File_Name));
  65. void parse_option PARAMS((char *Option_String));
  66. void Print_Options PARAMS((void));
  67. void parse_file_name PARAMS((char *File_Name));
  68. void print_stats PARAMS((void));
  69. FILE *Locate_File PARAMS((char *filename, char *mode));
  70. void print_credits PARAMS((void));
  71.  
  72. /* Prototypes for functions defined in render.c */
  73. void Create_Ray PARAMS((RAY *ray, int width, int height, DBL x, DBL y));
  74. void Supersample PARAMS((COLOUR *result, int x, int y, int Width,int Height));
  75. void Read_Rendered_Part PARAMS((void));
  76. void Start_Tracing PARAMS((void));
  77. void Initialize_Renderer PARAMS((void));
  78. void Trace PARAMS((RAY *Ray, COLOUR *Colour));
  79. void Check_User_Abort PARAMS((int Do_Stats));
  80.  
  81. /* Prototypes for functions defined in bound.c */
  82. void Destroy_Composite PARAMS((OBJECT *Object));
  83. void BuildBoundingSlabs PARAMS((OBJECT **Root));
  84. void recompute_bbox PARAMS((BBOX *bbox, TRANSFORM *trans));
  85. void Recompute_Inverse_BBox PARAMS((BBOX *bbox, TRANSFORM *trans));
  86. int Bounds_Intersect PARAMS((OBJECT *Root, RAY *ray, INTERSECTION *Best_Intersection, OBJECT **Best_Object));
  87. #ifdef DB_CODE
  88. /*these functions have be available globally */
  89. void PriorityQueueInsert PARAMS((Qelem *Queue, unsigned *Qsize, DBL key, OBJECT *obj));
  90. void CheckAndEnqueue PARAMS((Qelem *Queue, unsigned *Qsize, OBJECT *obj, BBOX *Bounds, RAYINFO *rayinfo));
  91. void PriorityQueueDelete PARAMS((Qelem *Queue, unsigned *Qsize, DBL *key, OBJECT **obj));
  92. #endif
  93.  
  94. /* Prototypes for functions defined in tokenize.c */
  95. void Initialize_Tokenizer PARAMS((char *filename));
  96. void Terminate_Tokenizer PARAMS((void));
  97. void Get_Token PARAMS((void));
  98. void Unget_Token PARAMS((void));
  99. int Skip_Spaces PARAMS((DATA_FILE *Data_File));
  100. int Parse_C_Comments PARAMS((DATA_FILE *Data_File));
  101. void Begin_String PARAMS((void));
  102. void Stuff_Character PARAMS((int c, DATA_FILE *Data_File));
  103. void End_String PARAMS((DATA_FILE *Data_File));
  104. int Read_Float PARAMS((DATA_FILE *Data_File));
  105. void Parse_String PARAMS((DATA_FILE *Data_File));
  106. int Read_Symbol PARAMS((DATA_FILE *Data_File));
  107. int Find_Reserved PARAMS((void));
  108. int Find_Symbol PARAMS((void));
  109. void Token_Error PARAMS((DATA_FILE *Data_File, char *str));
  110.  
  111. /* Prototypes for functions defined in parse.c */
  112. void Parse_Error PARAMS((TOKEN Token_Id));
  113. void Parse_Error_Str PARAMS((char *str));
  114. void Parse_Begin PARAMS((void));
  115. void Parse_End PARAMS((void));
  116. void Parse_Colour PARAMS((COLOUR *Colour));
  117. COLOUR_MAP *Parse_Colour_Map PARAMS((void));
  118. COLOUR_MAP *Parse_Colour_List PARAMS((int MinCount));
  119. void Parse_Comma PARAMS((void));
  120. DBL Parse_Float PARAMS((void));
  121. void Parse_Vector PARAMS((VECTOR *Vector));
  122. void Parse_Vector_Float PARAMS((VECTOR *Vector));
  123. void Parse_Vector PARAMS((VECTOR *Vector));
  124. void Parse_Scale_Vector PARAMS((VECTOR *Vector));
  125. void Parse PARAMS((void));
  126. void Write_Token PARAMS((TOKEN Token_Id, DATA_FILE *Data_File));
  127. void Error PARAMS((char *str));
  128. void MAError PARAMS((char *str));
  129. void Warn PARAMS((char *str, DBL Level));
  130.  
  131. /* Prototypes for functions defined in objects.c */
  132. int Intersection PARAMS((INTERSECTION *Ray_Intersection, OBJECT *Object, RAY *Ray));
  133. int Ray_In_Bounds PARAMS((RAY *Ray, OBJECT *Bounds));
  134. int Point_In_Clip PARAMS((VECTOR *IPoint, OBJECT *Clip));
  135. OBJECT *Copy_Bound_Clip PARAMS((OBJECT *Old));
  136. OBJECT *Copy_Object PARAMS((OBJECT *Old));
  137. void Translate_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  138. void Rotate_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  139. void Scale_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  140. void Transform_Object PARAMS((OBJECT *Object, TRANSFORM *Trans));
  141. int Inside_Object PARAMS((VECTOR *IPoint, OBJECT *Vector));
  142. void Invert_Object PARAMS((OBJECT *Object));
  143. void Destroy_Object PARAMS((OBJECT *Object));
  144. void create_istack PARAMS((void));
  145. ISTACK *open_istack PARAMS((void));
  146. void close_istack PARAMS((ISTACK *istk));
  147. void incstack PARAMS((ISTACK *istk));
  148.  
  149. /* Prototypes for functions defined in spheres.c */
  150. int All_Sphere_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  151. int All_Ellipsoid_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  152. int Intersect_Sphere PARAMS((RAY *Ray, SPHERE *Sphere, DBL *Depth1, DBL *Depth2));
  153. int Inside_Sphere PARAMS((VECTOR *IPoint, OBJECT *Object));
  154. int Inside_Ellipsoid PARAMS((VECTOR *IPoint, OBJECT *Object));
  155. void Sphere_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  156. void Ellipsoid_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  157. void *Copy_Sphere PARAMS((OBJECT *Object));
  158. void Translate_Sphere PARAMS((OBJECT *Object, VECTOR *Vector));
  159. void Rotate_Sphere PARAMS((OBJECT *Object, VECTOR *Vector));
  160. void Scale_Sphere PARAMS((OBJECT *Object, VECTOR *Vector));
  161. void Transform_Sphere PARAMS((OBJECT *Object, TRANSFORM *Trans));
  162. void Invert_Sphere PARAMS((OBJECT *Object));
  163. void Destroy_Sphere PARAMS((OBJECT *Object));
  164. SPHERE *Create_Sphere PARAMS((void));
  165.  
  166. /* Prototypes for functions defined in quadrics.c */
  167. int All_Quadric_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  168. int Intersect_Quadric PARAMS((RAY *Ray, QUADRIC *Quadric, DBL *Depth1, DBL *Depth2));
  169. int Inside_Quadric PARAMS((VECTOR *IPoint, OBJECT *Object));
  170. void Quadric_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  171. void *Copy_Quadric PARAMS((OBJECT *Object));
  172. void Quadric_To_Matrix PARAMS((QUADRIC *Quadric, MATRIX *Matrix));
  173. void Matrix_To_Quadric PARAMS((MATRIX *Matrix, QUADRIC *Quadric));
  174. void Translate_Quadric PARAMS((OBJECT *Object, VECTOR *Vector));
  175. void Rotate_Quadric PARAMS((OBJECT *Object, VECTOR *Vector));
  176. void Scale_Quadric PARAMS((OBJECT *Object, VECTOR *Vector));
  177. void Transform_Quadric PARAMS((OBJECT *Object, TRANSFORM *Trans));
  178. void Invert_Quadric PARAMS((OBJECT *Object));
  179. void Destroy_Quadric PARAMS((OBJECT *Object));
  180. QUADRIC *Create_Quadric PARAMS((void));
  181.  
  182. /* Prototypes for functions defined in poly.c */
  183. int All_Poly_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  184. int Inside_Poly PARAMS((VECTOR *IPoint, OBJECT *Object));
  185. void Poly_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  186. void *Copy_Poly PARAMS((OBJECT *Object));
  187. void Translate_Poly PARAMS((OBJECT *Object, VECTOR *Vector));
  188. void Rotate_Poly PARAMS((OBJECT *Object, VECTOR *Vector));
  189. void Scale_Poly PARAMS((OBJECT *Object, VECTOR *Vector));
  190. void Transform_Poly PARAMS((OBJECT *Object, TRANSFORM *Trans));
  191. void Invert_Poly PARAMS((OBJECT *Object));
  192. void Destroy_Poly PARAMS((OBJECT *Object));
  193. POLY *Create_Poly PARAMS((int Order));
  194.  
  195. /* Prototypes for functions defined in bezier.c */
  196. void Precompute_Patch_Values PARAMS((BICUBIC_PATCH *Shape));
  197. int All_Bicubic_Patch_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  198. int Inside_Bicubic_Patch PARAMS((VECTOR *IPoint, OBJECT *Object));
  199. void Bicubic_Patch_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  200. void *Copy_Bicubic_Patch PARAMS((OBJECT *Object));
  201. void Translate_Bicubic_Patch PARAMS((OBJECT *Object, VECTOR *Vector));
  202. void Rotate_Bicubic_Patch PARAMS((OBJECT *Object, VECTOR *Vector));
  203. void Scale_Bicubic_Patch PARAMS((OBJECT *Object, VECTOR *Vector));
  204. void Transform_Bicubic_Patch PARAMS((OBJECT *Object, TRANSFORM *Trans));
  205. void Invert_Bicubic_Patch PARAMS((OBJECT *Object));
  206. BICUBIC_PATCH *Create_Bicubic_Patch PARAMS((void));
  207. void Destroy_Bicubic_Patch PARAMS((OBJECT *Object));
  208.  
  209. /* Prototypes for functions defined in boxes.c */
  210. int All_Box_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  211. int Intersect_Boxx PARAMS((RAY *Ray, BOX *box, DBL *Depth1, DBL *Depth2));
  212. int Inside_Box PARAMS((VECTOR *point, OBJECT *Object));
  213. void Box_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  214. void *Copy_Box PARAMS((OBJECT *Object));
  215. void Translate_Box PARAMS((OBJECT *Object, VECTOR *Vector));
  216. void Rotate_Box PARAMS((OBJECT *Object, VECTOR *Vector));
  217. void Scale_Box PARAMS((OBJECT *Object, VECTOR *Vector));
  218. void Transform_Box PARAMS((OBJECT *Object, TRANSFORM *Trans));
  219. void Invert_Box PARAMS((OBJECT *Object));
  220. BOX *Create_Box PARAMS((void));
  221. void Destroy_Box PARAMS((OBJECT *Object));
  222.  
  223. /* Prototypes for functions defined in blob.c */
  224. void Set_Blob_Solver PARAMS((OBJECT *obj, int Sturm_Flag));
  225. int All_Blob_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  226. void BlobDelete PARAMS((OBJECT *obj));
  227. int Inside_Blob PARAMS((VECTOR *point, OBJECT *Object));
  228. void Blob_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  229. void *Copy_Blob PARAMS((OBJECT *Object));
  230. void Translate_Blob PARAMS((OBJECT *Object, VECTOR *Vector));
  231. void Rotate_Blob PARAMS((OBJECT *Object, VECTOR *Vector));
  232. void Scale_Blob PARAMS((OBJECT *Object, VECTOR *Vector));
  233. void Invert_Blob PARAMS((OBJECT *Object));
  234. void Transform_Blob PARAMS((OBJECT *Object, TRANSFORM *Trans));
  235. BLOB *Create_Blob PARAMS((void));
  236. void Destroy_Blob PARAMS((OBJECT *Object));
  237. void MakeBlob PARAMS((BLOB *blob, DBL threshold, blobstackptr bloblist,
  238.               int npoints, int sflag));
  239.  
  240. /* Prototypes for functions defined in cones.c */
  241. int All_Cone_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  242. int Inside_Cone PARAMS((VECTOR *point, OBJECT *Object));
  243. void Cone_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  244. void *Copy_Cone PARAMS((OBJECT *Object));
  245. void Translate_Cone PARAMS((OBJECT *Object, VECTOR *Vector));
  246. void Rotate_Cone PARAMS((OBJECT *Object, VECTOR *Vector));
  247. void Scale_Cone PARAMS((OBJECT *Object, VECTOR *Vector));
  248. void Transform_Cone PARAMS((OBJECT *Object, TRANSFORM *Trans));
  249. void Invert_Cone PARAMS((OBJECT *Object));
  250. CONE *Create_Cone PARAMS((void));
  251. CONE *Create_Cylinder PARAMS((void));
  252. void Compute_Cone_Data PARAMS((OBJECT *Object));
  253. void Compute_Cylinder_Data PARAMS((OBJECT *Object));
  254. void Destroy_Cone PARAMS((OBJECT *Object));
  255.  
  256. /* Prototypes for functions defined in cones.c */
  257. int All_Disc_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  258. int Intersect_Disc PARAMS((RAY *Ray, DISC *Disc, DBL *Depth));
  259. int Inside_Disc PARAMS((VECTOR *point, OBJECT *Object));
  260. void Disc_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  261. void *Copy_Disc PARAMS((OBJECT *Object));
  262. void Translate_Disc PARAMS((OBJECT *Object, VECTOR *Vector));
  263. void Rotate_Disc PARAMS((OBJECT *Object, VECTOR *Vector));
  264. void Scale_Disc PARAMS((OBJECT *Object, VECTOR *Vector));
  265. void Transform_Disc PARAMS((OBJECT *Object, TRANSFORM *Trans));
  266. void Invert_Disc PARAMS((OBJECT *Object));
  267. DISC *Create_Disc PARAMS((void));
  268. void Destroy_Disc PARAMS((OBJECT *Object));
  269.  
  270. /* Prototypes for functions defined in hfield.c */
  271. void Find_Hf_Min_Max PARAMS((HEIGHT_FIELD *H_Field, IMAGE *Image));
  272. int Intersect_Sub_Block PARAMS((HF_BLOCK *Block, RAY *Ray, HEIGHT_FIELD *H_Field,
  273.     VECTOR *start, VECTOR *end));
  274. int Intersect_Hf_Node PARAMS((RAY *Ray, HEIGHT_FIELD *H_Field, VECTOR *start, VECTOR *end));
  275. int Intersect_Box PARAMS((HEIGHT_FIELD *H_Field,RAY *Ray,DBL *depth1,DBL *depth2));
  276. DBL Get_Height PARAMS((int x,int y,HEIGHT_FIELD *H_Field));
  277. int Intersect_Pixel PARAMS((int x,int z,RAY *Ray,HEIGHT_FIELD *H_Field,DBL height1,DBL height2));
  278. int All_HeightFld_Intersections PARAMS((OBJECT *Object,RAY *Ray,ISTACK *Depth_Stack));
  279. int All_Csg_HeightFld_Intersections PARAMS((OBJECT *Object,RAY *Ray,ISTACK *Depth_Stack));
  280. int Intersect_HeightFld PARAMS((RAY *Ray,HEIGHT_FIELD *H_Field,DBL *Depth));
  281. int Inside_HeightFld PARAMS((VECTOR *IPoint,OBJECT *Object));
  282. void HeightFld_Normal PARAMS((VECTOR *Result,OBJECT *Object,VECTOR *IPoint));
  283. void *Copy_HeightFld PARAMS((OBJECT *Object));
  284. void Translate_HeightFld PARAMS((OBJECT *Object,VECTOR *Vector));
  285. void Rotate_HeightFld PARAMS((OBJECT *Object,VECTOR *Vector));
  286. void Scale_HeightFld PARAMS((OBJECT *Object,VECTOR *Vector));
  287. void Transform_HeightFld PARAMS((OBJECT *Object,TRANSFORM *Trans));
  288. void Destroy_HeightFld PARAMS((OBJECT *Object));
  289. void Invert_HeightFld PARAMS((OBJECT *Object));
  290. HEIGHT_FIELD *Create_Height_Field PARAMS((void));
  291.  
  292. /* Prototypes for functions defined in triangle.c */
  293. void Find_Triangle_Dominant_Axis PARAMS((TRIANGLE *Triangle));
  294. int Compute_Triangle  PARAMS((TRIANGLE *Triangle, int Smooth));
  295. void Compute_Smooth_Triangle  PARAMS((SMOOTH_TRIANGLE *Triangle));
  296. int All_Triangle_Intersections  PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  297. int Intersect_Triangle  PARAMS((RAY *Ray, TRIANGLE *Triangle, DBL *Depth));
  298. int Inside_Triangle  PARAMS((VECTOR *IPoint, OBJECT *Object));
  299. void Triangle_Normal  PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  300. void *Copy_Triangle  PARAMS((OBJECT *Object));
  301. void Translate_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  302. void Rotate_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  303. void Scale_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  304. void Transform_Triangle  PARAMS((OBJECT *Object, TRANSFORM *Trans));
  305. TRIANGLE *Create_Triangle PARAMS((void));
  306. void Invert_Triangle  PARAMS((OBJECT *Object));
  307. void Smooth_Triangle_Normal  PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  308. void *Copy_Smooth_Triangle PARAMS((OBJECT *Object));
  309. void Translate_Smooth_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  310. void Rotate_Smooth_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  311. void Scale_Smooth_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  312. void Transform_Smooth_Triangle  PARAMS((OBJECT *Object, TRANSFORM *Trans));
  313. void Invert_Smooth_Triangle  PARAMS((OBJECT *Object));
  314. SMOOTH_TRIANGLE *Create_Smooth_Triangle PARAMS((void));
  315. void Destroy_Triangle  PARAMS((OBJECT *Object));
  316.  
  317. /* Prototypes for functions defined in vect.c */
  318. int solve_quadratic PARAMS((DBL *x, DBL *y));
  319. int solve_cubic PARAMS((DBL *x, DBL *y));
  320. int solve_quartic PARAMS((DBL *x, DBL *y));
  321. int polysolve PARAMS((int order, DBL *Coeffs, DBL *roots));
  322.  
  323. /* Prototypes for functions defined in lighting.c */
  324. void Add_Pigment PARAMS((COLOUR *Colour, PIGMENT *Pigment, VECTOR *IPoint));
  325. void Perturb_Normal PARAMS((VECTOR *Layer_Normal, TNORMAL *Tnormal, VECTOR *IPoint));
  326. void Diffuse PARAMS((FINISH *Finish, VECTOR *IPoint, RAY *Eye, VECTOR *Layer_Normal,
  327.  COLOUR *Layer_Colour, COLOUR *Colour,DBL Attenuation, OBJECT *Object));
  328. void Reflect PARAMS((DBL Reflection, VECTOR *IPoint, RAY *Ray, VECTOR *Layer_Normal, COLOUR *Colour));
  329. void Refract PARAMS((TEXTURE *Texture, VECTOR *IPoint, RAY *Ray, VECTOR *Layer_Normal, COLOUR *Colour));
  330. void Fog PARAMS((DBL Distance, COLOUR *Fog_Colour, DBL Fog_Distance, COLOUR *Colour));
  331. void Compute_Reflected_Colour PARAMS ((RAY *Ray, FINISH *Finish,\
  332.  INTERSECTION *Ray_Intersection, COLOUR *Layer_Colour, COLOUR *Filter_Colour,COLOUR *Colour, VECTOR *Layer_Normal));
  333. void Determine_Apparent_Colour PARAMS ((INTERSECTION *Ray_Intersection, COLOUR *Colour, RAY *Ray));
  334. void Filter_Shadow_Ray PARAMS ((INTERSECTION *Ray_Intersection, COLOUR *Colour));
  335.  
  336. /* Prototypes for functions defined in point.c */
  337. int All_Light_Source_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  338. int Inside_Light_Source PARAMS((VECTOR *point, OBJECT *Object));
  339. void Light_Source_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  340. void *Copy_Light_Source PARAMS((OBJECT *Object));
  341. void Translate_Light_Source PARAMS((OBJECT *Object, VECTOR *Vector));
  342. void Rotate_Light_Source PARAMS((OBJECT *Object, VECTOR *Vector));
  343. void Scale_Light_Source PARAMS((OBJECT *Object, VECTOR *Vector));
  344. void Transform_Light_Source PARAMS((OBJECT *Object, TRANSFORM *Trans));
  345. void Invert_Light_Source PARAMS((OBJECT *Object));
  346. void Destroy_Light_Source PARAMS((OBJECT *Object));
  347. LIGHT_SOURCE *Create_Light_Source PARAMS((void));
  348. DBL Attenuate_Light PARAMS((LIGHT_SOURCE *Light_Source, RAY *Light_Source_Ray));
  349. COLOUR **Create_Light_Grid PARAMS((int Size1, int Size2));
  350.  
  351. /* Prototypes for functions defined in texture.c */
  352. void Compute_Colour PARAMS((COLOUR *Colour,PIGMENT *Pigment, DBL value));
  353. void Initialize_Noise PARAMS((void));
  354. void InitTextureTable PARAMS((void));
  355. void InitRTable PARAMS((void));
  356. int R PARAMS((VECTOR *v));
  357. int Crc16 PARAMS((char *buf, int count));
  358. DBL Noise PARAMS((DBL x, DBL y, DBL z));
  359. void DNoise PARAMS((VECTOR *result, DBL x, DBL y, DBL z));
  360. DBL Turbulence PARAMS((DBL x, DBL y, DBL z, DBL omega, DBL lambda, int octaves));
  361. void DTurbulence PARAMS((VECTOR *result, DBL x, DBL y, DBL z, DBL omega, DBL lambda, int octaves));
  362. DBL cycloidal PARAMS((DBL value));
  363. DBL Triangle_Wave PARAMS((DBL value));
  364. void Translate_Textures PARAMS((TEXTURE *Textures, VECTOR *Vector));
  365. void Rotate_Textures PARAMS((TEXTURE *Textures, VECTOR *Vector));
  366. void Scale_Textures PARAMS((TEXTURE *Textures, VECTOR *Vector));
  367. void Transform_Textures PARAMS((TEXTURE *Textures, TRANSFORM *Trans));
  368. void Destroy_Textures PARAMS((TEXTURE *Textures));
  369. void Post_Textures PARAMS((TEXTURE *Textures));
  370. FINISH *Create_Finish PARAMS((void));
  371. FINISH *Copy_Finish PARAMS((FINISH *Old));
  372. TEXTURE *Create_PNF_Texture PARAMS((void));
  373. TILES *Create_Tiles_Texture PARAMS((void));
  374. MATERIAL *Create_Material_Texture PARAMS((void));
  375. TEXTURE *Copy_Textures PARAMS((TEXTURE *Textures));
  376. TEXTURE *Create_Texture PARAMS((void));
  377. TEXTURE *Copy_Materials PARAMS((TEXTURE *Old));
  378.  
  379. /* Prototypes for functions defined in pigment.c */
  380. void agate PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  381. void bozo PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  382. void brick PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  383. void checker PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  384. void gradient PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  385. void granite PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  386. void marble PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  387. void mandel PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  388. void radial PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  389. void spotted PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  390. void wood PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  391. void leopard PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));   /* SWT 7/18/91 */
  392. void onion PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  393. void hexagon PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  394. PIGMENT *Create_Pigment PARAMS((void));
  395. PIGMENT *Copy_Pigment PARAMS((PIGMENT *Old));
  396. void Translate_Pigment PARAMS((PIGMENT *Pigment, VECTOR *Vector));
  397. void Rotate_Pigment PARAMS((PIGMENT *Pigment, VECTOR *Vector));
  398. void Scale_Pigment PARAMS((PIGMENT *Pigment, VECTOR *Vector));
  399. void Transform_Pigment PARAMS((PIGMENT *Pigment, TRANSFORM *Trans));
  400. void Destroy_Pigment PARAMS((PIGMENT *Pigment));
  401. void Post_Pigment PARAMS((PIGMENT *Pigment));
  402.  
  403. /* Prototypes for functions defined in normal.c */
  404. void ripples PARAMS((DBL x, DBL y, DBL z, TNORMAL *Tnormal, VECTOR *Vector));
  405. void waves PARAMS((DBL x, DBL y, DBL z, TNORMAL *Tnormal, VECTOR *Vector));
  406. void bumps PARAMS((DBL x, DBL y, DBL z, TNORMAL *Tnormal, VECTOR *normal));
  407. void dents PARAMS((DBL x, DBL y, DBL z, TNORMAL *Tnormal, VECTOR *normal));
  408. void wrinkles PARAMS((DBL x, DBL y, DBL z, TNORMAL *Tnormal, VECTOR *normal));
  409. TNORMAL *Create_Tnormal PARAMS((void));
  410. TNORMAL *Copy_Tnormal PARAMS((TNORMAL *Old));
  411. void Translate_Tnormal PARAMS((TNORMAL *Tnormal, VECTOR *Vector));
  412. void Rotate_Tnormal PARAMS((TNORMAL *Tnormal, VECTOR *Vector));
  413. void Scale_Tnormal PARAMS((TNORMAL *Tnormal, VECTOR *Vector));
  414. void Transform_Tnormal PARAMS((TNORMAL *Tnormal, TRANSFORM *Trans));
  415. void Destroy_Tnormal PARAMS((TNORMAL *Tnormal));
  416. void Post_Tnormal PARAMS((TNORMAL *Tnormal));
  417.  
  418. /* Prototypes for functions defined in txttest.c */
  419. void painted1 PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour)); /* CdW 7/2/91 */
  420. void painted2 PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour)); /* CdW 7/2/91 */
  421. void painted3 PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour)); /* CdW 7/2/91 */
  422. void bumpy1 PARAMS((DBL x, DBL y, DBL z, TNORMAL *Tnormal, VECTOR *normal)); /* CdW 7/2/91*/
  423. void bumpy2 PARAMS((DBL x, DBL y, DBL z, TNORMAL *Tnormal, VECTOR *normal)); /* CdW 7/2/91*/
  424. void bumpy3 PARAMS((DBL x, DBL y, DBL z, TNORMAL *Tnormal, VECTOR *normal)); /* CdW 7/2/91*/
  425.  
  426. /* Prototypes for functions defined in image.c */
  427. void image_map PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  428. TEXTURE *material_map PARAMS((VECTOR *IPoint, MATERIAL *Texture));
  429. TEXTURE *tiles_texture PARAMS((VECTOR *IPoint, TILES *Texture));
  430. void bump_map PARAMS((DBL x, DBL y, DBL z, TNORMAL *Tnormal, VECTOR *normal));/* CdW 7/8/91*/
  431. void gouge_map PARAMS((DBL x, DBL y, DBL z, TNORMAL *Tnormal, VECTOR *normal));
  432. int map PARAMS((DBL x,DBL y,DBL z, TPATTERN *Turb ,IMAGE *Image,DBL *xcoor, DBL *ycoor));
  433. IMAGE *Copy_Image PARAMS ((IMAGE *Old));
  434. IMAGE *Create_Image PARAMS ((void));
  435. void Destroy_Image PARAMS ((IMAGE *Image));
  436.  
  437. /* Prototypes for functions defined in csg.c */
  438. int All_CSG_Union_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  439. int All_CSG_Merge_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  440. int All_CSG_Intersect_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  441. int Inside_CSG_Union PARAMS((VECTOR *point, OBJECT *Object));
  442. int Inside_CSG_Intersection PARAMS((VECTOR *point, OBJECT *Object));
  443. void *Copy_CSG PARAMS((OBJECT *Object));
  444. void Translate_CSG PARAMS((OBJECT *Object, VECTOR *Vector));
  445. void Rotate_CSG PARAMS((OBJECT *Object, VECTOR *Vector));
  446. void Scale_CSG PARAMS((OBJECT *Object, VECTOR *Vector));
  447. void Transform_CSG PARAMS((OBJECT *Object, TRANSFORM *Trans));
  448. void Destroy_CSG PARAMS((OBJECT *Object));
  449. void Invert_CSG_Union PARAMS((OBJECT *Object));
  450. void Invert_CSG_Intersection PARAMS((OBJECT *Object));
  451. CSG *Create_CSG_Union PARAMS((void));
  452. CSG *Create_CSG_Merge PARAMS((void));
  453. CSG *Create_CSG_Intersection PARAMS((void));
  454. void Compute_CSG_Bounds PARAMS((OBJECT *Object));
  455.  
  456. /* Prototypes for functions defined in colour.c */
  457. COLOUR *Create_Colour PARAMS((void));
  458. COLOUR *Copy_Colour PARAMS((COLOUR *Old));
  459. COLOUR_MAP_ENTRY *Create_CMap_Entries PARAMS((int Map_Size));
  460. COLOUR_MAP_ENTRY *Copy_CMap_Entries PARAMS((COLOUR_MAP_ENTRY *Old,int Map_Size));
  461. COLOUR_MAP *Create_Colour_Map PARAMS((void));
  462. COLOUR_MAP *Copy_Colour_Map PARAMS((COLOUR_MAP *Old));
  463. DBL Colour_Distance PARAMS((COLOUR *colour1, COLOUR *colour2));
  464. void Add_Colour PARAMS((COLOUR *result, COLOUR *colour1, COLOUR *colour2));
  465. void Scale_Colour PARAMS((COLOUR *result, COLOUR *colour, DBL factor));
  466. void Clip_Colour PARAMS((COLOUR *result, COLOUR *colour));
  467. void Destroy_Colour_Map PARAMS((COLOUR_MAP *CMap));
  468.  
  469. /* Prototypes for functions defined in camera.c */
  470. void Translate_Camera PARAMS((CAMERA *Cm, VECTOR *Vector));
  471. void Rotate_Camera PARAMS((CAMERA *Cm, VECTOR *Vector));
  472. void Scale_Camera PARAMS((CAMERA *Cm, VECTOR *Vector));
  473. void Transform_Camera PARAMS((CAMERA *Cm, TRANSFORM *Trans));
  474. CAMERA *Copy_Camera PARAMS((CAMERA *Old));
  475. CAMERA *Create_Camera PARAMS((void));
  476.  
  477. /* Prototypes for functions defined in ray.c */
  478. void Make_Ray PARAMS((RAY *r));
  479. void Initialize_Ray_Containers PARAMS((RAY *Ray));
  480. void Copy_Ray_Containers PARAMS((RAY *Dest_Ray, RAY *Source_Ray));
  481. void Ray_Enter PARAMS((RAY *ray, TEXTURE *texture));
  482. void Ray_Exit PARAMS((RAY *ray));
  483.  
  484. /* Prototypes for functions defined in planes.c */
  485. int All_Plane_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  486. int Intersect_Plane PARAMS((RAY *Ray, PLANE *Plane, DBL *Depth));
  487. int Inside_Plane PARAMS((VECTOR *point, OBJECT *Object));
  488. void Plane_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  489. void *Copy_Plane PARAMS((OBJECT *Object));
  490. void Translate_Plane PARAMS((OBJECT *Object, VECTOR *Vector));
  491. void Rotate_Plane PARAMS((OBJECT *Object, VECTOR *Vector));
  492. void Scale_Plane PARAMS((OBJECT *Object, VECTOR *Vector));
  493. void Transform_Plane PARAMS((OBJECT *Object, TRANSFORM *Trans));
  494. void Invert_Plane PARAMS((OBJECT *Object));
  495. void Destroy_Plane PARAMS((OBJECT *Object));
  496. PLANE *Create_Plane PARAMS((void));
  497.  
  498. /* Prototypes for functions defined in iff.c */
  499. void iff_error PARAMS((void));
  500. int read_byte PARAMS((FILE *f));
  501. int read_word PARAMS((FILE *f));
  502. long read_long PARAMS((FILE *f));
  503. void Read_Chunk_Header PARAMS((FILE *f, CHUNK_HEADER *dest));
  504. void Read_Iff_Image PARAMS((IMAGE *Image, char *filename));
  505.  
  506. /* Prototypes for functions defined in gif.c */
  507. int out_line PARAMS((unsigned char *pixels, int linelen));
  508. int get_byte PARAMS((void));
  509. void Read_Gif_Image PARAMS((IMAGE *Image, char *filename));
  510.  
  511. /* Prototypes for functions defined in gifdecod.c */
  512. void cleanup_gif_decoder PARAMS((void));
  513. WORD init_exp PARAMS((int i_size));   /* changed param to int to avoid
  514.                      problems with 32bit int ANSI
  515.                      compilers. */
  516. WORD get_next_code PARAMS((void));
  517. WORD decoder PARAMS((int i_linewidth)); /* same as above */
  518.  
  519. /* Prototypes for machine specific functions defined in "computer".c (ibm.c amiga.c unix.c etc.)*/
  520. void display_finished PARAMS((void));
  521. void display_init PARAMS((int width, int height));
  522. void display_close PARAMS((void));
  523. void display_plot PARAMS((int x, int y, unsigned char Red, unsigned char Green, unsigned char Blue));
  524.  
  525. /* Prototypes for functions defined in matrices.c */
  526. void MZero PARAMS((MATRIX *result));
  527. void MIdentity PARAMS((MATRIX *result));
  528. void MTimes PARAMS((MATRIX *result, MATRIX *matrix1, MATRIX *matrix2));
  529. void MAdd PARAMS((MATRIX *result, MATRIX *matrix1, MATRIX *matrix2));
  530. void MSub PARAMS((MATRIX *result, MATRIX *matrix1, MATRIX *matrix2));
  531. void MScale PARAMS((MATRIX *result, MATRIX *matrix1, DBL amount));
  532. void MTranspose PARAMS((MATRIX *result, MATRIX *matrix1));
  533. void MTransPoint PARAMS((VECTOR *result, VECTOR *vector, TRANSFORM *trans));
  534. void MInvTransPoint PARAMS((VECTOR *result, VECTOR *vector, TRANSFORM *trans));
  535. void MTransDirection PARAMS((VECTOR *result, VECTOR *vector, TRANSFORM *trans));
  536. void MInvTransDirection PARAMS((VECTOR *result, VECTOR *vector, TRANSFORM *trans));
  537. void MTransNormal PARAMS((VECTOR *result, VECTOR *vector, TRANSFORM *trans));
  538. void MInvTransNormal PARAMS((VECTOR *result, VECTOR *vector, TRANSFORM *trans));
  539. void Compute_Scaling_Transform PARAMS((TRANSFORM *result, VECTOR *vector));
  540. void Compute_Inversion_Transform PARAMS((TRANSFORM *result));
  541. void Compute_Translation_Transform PARAMS((TRANSFORM *transform, VECTOR *vector));
  542. void Compute_Rotation_Transform PARAMS((TRANSFORM *transform, VECTOR *vector));
  543. void Compute_Look_At_Transform PARAMS((TRANSFORM *transform, VECTOR *Look_At, VECTOR *Up, VECTOR *Right));
  544. void Compose_Transforms PARAMS((TRANSFORM *Original_Transform, TRANSFORM *New_Transform));
  545. void Compute_Axis_Rotation_Transform PARAMS((TRANSFORM *transform, VECTOR *V, DBL angle));
  546. void Compute_Coordinate_Transform PARAMS((TRANSFORM *trans, VECTOR *origin, VECTOR *up, DBL r, DBL len));
  547. TRANSFORM *Create_Transform PARAMS((void));
  548. TRANSFORM *Copy_Transform PARAMS((TRANSFORM *Old));
  549. VECTOR *Create_Vector PARAMS((void));
  550. VECTOR *Copy_Vector PARAMS((VECTOR *Old));
  551. DBL *Create_Float PARAMS((void));
  552. DBL *Copy_Float PARAMS((DBL *Old));
  553.  
  554. /* Prototypes for functions defined in dump.c */
  555. FILE_HANDLE *Get_Dump_File_Handle PARAMS((void));
  556. char *Default_Dump_File_Name PARAMS((void));
  557. int Open_Dump_File PARAMS((FILE_HANDLE *handle, char *name,
  558.                            int *width, int *height, int buffer_size, int mode));
  559. void Write_Dump_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int line_number));
  560. int Read_Dump_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int *line_number));
  561. int Read_Dump_Int_Line PARAMS((FILE_HANDLE *handle, IMAGE_LINE *line_data, int *line_number));
  562. void Read_Dump_Image PARAMS((IMAGE *Image, char *filename));
  563. void Close_Dump_File PARAMS((FILE_HANDLE *handle));
  564.  
  565. /* Prototypes for functions defined in targa.c */
  566. FILE_HANDLE *Get_Targa_File_Handle PARAMS((void));
  567. char *Default_Targa_File_Name PARAMS((void));
  568. int Open_Targa_File PARAMS((FILE_HANDLE *handle, char *name,
  569.                            int *width, int *height, int buffer_size, int mode));
  570. void Write_Targa_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int line_number));
  571. int Read_Targa_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int *line_number));
  572. void Close_Targa_File PARAMS((FILE_HANDLE *handle));
  573. void Read_Targa_Image PARAMS((IMAGE *Image, char *filename));
  574.  
  575. /* Prototypes for functions defined in Raw.c */
  576. FILE_HANDLE *Get_Raw_File_Handle PARAMS((void));
  577. char *Default_Raw_File_Name PARAMS((void));
  578. int Open_Raw_File PARAMS((FILE_HANDLE *handle, char *name,
  579.                            int *width, int *height, int buffer_size, int mode));
  580. void Write_Raw_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int line_number));
  581. int Read_Raw_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int *line_number));
  582. void Close_Raw_File PARAMS((FILE_HANDLE *handle));
  583.  
  584. #ifdef DB_CODE
  585.  
  586.  
  587.  
  588.   /* Prototypes for functions defined in addon0.c */
  589.  
  590.   void *new_malloc PARAMS((size_t size));
  591.   void new_free PARAMS((void *pointer, size_t size));
  592.  
  593.   void Init_Additionals_1 PARAMS((void));
  594.   void Init_Additionals_2 PARAMS((void));
  595.   void Draw_Vista_Tree PARAMS((void));
  596.   void Draw_Additional PARAMS((void));
  597.  
  598.   void Fatal_Error PARAMS((char *str));
  599.   void Fatal_MAError PARAMS((char *str));
  600.  
  601.   /* Prototypes for functions defined in addon1.c */
  602.  
  603.   int Intersect_Light_Tree PARAMS((RAY *Ray, PROJECT_TREE_NODE *Vista, int x, int y, INTERSECTION *Best_Intersection, OBJECT **Object));
  604.   void Trace_Primary_Ray PARAMS((RAY *Ray, COLOUR *Colour, int x));
  605.   void Prune_Vista_Tree PARAMS((int y));
  606.  
  607.   /* Prototypes for functions defined in addon2.c */
  608.  
  609.   void Compute_Quadric_BBox PARAMS((QUADRIC *Quadric));
  610.   int Test_Inverted PARAMS((OBJECT *Object));
  611.   void Compute_Plane_Min_Max PARAMS((PLANE *Plane, VECTOR *Min, VECTOR *Max));
  612. #endif
  613.