home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / raytrace / radiance / simplerd.lha / simplerad / FinalFTP / Light / io.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-07-20  |  8.3 KB  |  216 lines

  1. /**********************************************************************/
  2. /* io.c                                                               */
  3. /*                                                                    */
  4. /* Set input and output options.                                      */
  5. /*                                                                    */
  6. /* Copyright (C) 1992, Bernard Kwok                                   */
  7. /* All rights reserved.                                               */
  8. /* Revision 1.0                                                       */
  9. /* May, 1992                                                          */
  10. /**********************************************************************/
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <string.h>
  14. #include "geo.h"
  15. #include "struct.h"
  16. #include "misc.h"
  17. #include "io.h"
  18. #include "rad.h"
  19. #include "ff.h"
  20. #include "scull.h"
  21.  
  22. extern OptionType Option;
  23. extern FF_OptionType FF_Options;
  24. extern RadParams ReadLog;
  25. extern ShaftStatstype ShaftStats;
  26. extern void ParseArgs();
  27. void SetFilenames();
  28.  
  29. /**********************************************************************/
  30. OptionType Option;            /* Program options */
  31. extern void Usage();
  32.  
  33. /**********************************************************************/
  34. /* Switch stats log on / off */
  35. /**********************************************************************/
  36. void LogStats(logflag)
  37.      int logflag;
  38. {
  39.   if (logflag) {
  40.     if (!(Option.StatFile = fopen(Option.StatFilename, "w"))) {
  41.       fprintf(stderr,"%s: cannot open statistics file %s\n", 
  42.           ProgName, Option.StatFilename);
  43.       exit(1);
  44.     } 
  45.     printf("\n\t*** Logging statistics to %s ***\n", Option.StatFilename);
  46.   } else 
  47.     fclose(Option.StatFile);
  48. }
  49.  
  50. /**********************************************************************/
  51. /* Set radiosity parameters */
  52. /**********************************************************************/
  53. void SetRadParams()
  54. {
  55.   char *env_var = " ";
  56.  
  57.   ReadLog.log = TRUE;           /* log reading of objects */ 
  58.   ReadLog.objcount = 0;         /* objects read */
  59.   ReadLog.meshcount = 0;        /* meshes read */
  60.   ReadLog.polycount = 0;        /* polygons per mesh */
  61.   ReadLog.totpoly = 0;          /* total polys */
  62.   ReadLog.totmesh = 0;          /* total meshes */
  63.   ReadLog.num_objects = 0;      /* total objects */
  64.   ReadLog.num_textures = 0;     /* total textures */
  65.   ReadLog.num_elements = 0;     /* no elements */
  66.   ReadLog.num_receivers = 0;    /* no receivers */
  67.   ReadLog.elements =            /* empty element list, and tail */
  68.     ReadLog.eltail = (Elist *)NULL; 
  69.   ReadLog.threshold =           /* Stopping criteria threshold */
  70.     RAD_THRESHOLD;
  71.   ReadLog.max_iterations =      /* Stopping # of iterations */
  72.     RAD_ITERATIONS;
  73.   ReadLog.intensityScale = 1.0; /* Scale intensity for display */
  74.   ReadLog.hemicubeRes = 100;    /* 100 pixels for hc resolution */
  75.   ReadLog.writerad = 0;         /* Do not write out rad solution */
  76.   ReadLog.worldSize = 0.0;      /* World not created yet */
  77.   ReadLog.totalEnergy = 0.0;
  78.   ReadLog.totalEnergyLeft = 0.0;
  79.   ReadLog.totalArea = 0.0;       
  80.   ReadLog.ptotalArea.samples[0] = -1.0;
  81.  
  82.   if ((env_var = getenv("PR_maxiter")) != NULL) 
  83.     ReadLog.max_iterations = atoi(env_var);  
  84. }
  85.  
  86. #define FF_AREA_RATIO 0.01     /* Ratio of area of minimum sized
  87.                   patch to area of the world */
  88. /**********************************************************************/
  89. /* Set default form-factor options */
  90. /**********************************************************************/
  91. void SetFFOptions(argv)
  92.      char *argv[];
  93. {
  94.   int temp;
  95.   char *env_var = " ";
  96.   
  97.   /* Numerical disk approx, without adaptve ray sampling, nor
  98.      analytic form factor usage (default) */
  99.   FF_Options.fftype = NUMERICAL_FF;   
  100.   FF_Options.sample_shape = DISC_FF;
  101.   FF_Options.varying_numsamps = 0;
  102.   FF_Options.use_analytic = 0;
  103.   FF_Options.src_rec_cull = 0;      /* Use src/rec object BV culling */
  104.   FF_Options.quadtri_ray = 0;       /* Use general ray/poly intersect
  105.                        routine if ray-casting form-factors */
  106.   FF_Options.shaft_cull = 0;
  107.  
  108.   if ((env_var = getenv("PR_shaft")) != NULL) 
  109.     FF_Options.shaft_cull = atoi(env_var);  
  110.   if (FF_Options.shaft_cull) {  
  111.     ShaftStats.strategy = RATIO_OPEN; /* Use ratio open = 40% default */
  112.     ShaftStats.ratio_open = 0.4;
  113.     if ((env_var = getenv("PR_cstrag")) != NULL) 
  114.       ShaftStats.strategy = atoi(env_var); 
  115.   }
  116.   if ((env_var = getenv("PR_quadtri")) != NULL) 
  117.     FF_Options.quadtri_ray = atoi(env_var);  
  118.   if ((env_var = getenv("PR_rcull")) != NULL) 
  119.     FF_Options.src_rec_cull = atoi(env_var);  
  120.   if ((env_var = getenv("PR_maxsub")) != NULL) 
  121.     FF_Options.max_levels = atoi(env_var);
  122.   if ((env_var = getenv("PR_adjsamp")) != NULL) 
  123.     FF_Options.varying_numsamps = atoi(env_var);
  124.   if ((env_var = getenv("PR_analyt")) != NULL) 
  125.     FF_Options.use_analytic = atoi(env_var);
  126.   if ((env_var = getenv("FF_mindiff")) != NULL) 
  127.     FF_Options.F_diff_edge = atof(env_var);
  128.   if ((env_var = getenv("FF_perarea")) != NULL) 
  129.     FF_Options.min_element_area = atof(env_var);
  130.   
  131.   /* Settings only for linkage forming [Hanrahan91] (not used) */
  132.   if (ReadLog.forming_links) {
  133.     FF_Options.min_element_area = FF_AREA_RATIO * ReadLog.totalArea;
  134.     FF_Options.num_samples = DEFAULT_LSAMPLES;
  135.   } 
  136.   /* Settings only for progressive refinement */
  137.   else {
  138.     FF_Options.num_samples = DEFAULT_SAMPLES;
  139.   }
  140. }
  141.  
  142. /**********************************************************************/
  143. /* Set default options                                                */
  144. /**********************************************************************/
  145. void SetOptions(argc, argv)
  146.      int argc;
  147.      char *argv[];
  148. {
  149.   char *env_var = " ";
  150.  
  151.   Option.ff_raytrace = TRUE;          /* Use ray casting for FF */
  152.   Option.device = PRINT;              /* Default output stats to stdout */
  153.   Option.debug = FALSE;               /* No debug */
  154.   Option.statistics = FALSE;          /* Don't print statistics */
  155.   Option.visibility = 0;              /* Using ray casting for FF */
  156.   Option.grid = TRUE;                 /* Use bounding volumes */
  157.   Option.poly_grid = TRUE;            /* Use object / polygon 
  158.                      hierarchical bounding volumes */
  159.   Option.show_pr_steps = FALSE;       /* Show refinement steps */
  160.   Option.print_scene = FALSE;         /* Log input/output scene */
  161.   Option.ambient = 0;                 /* Use an ambient term for display
  162.                      purposes during PR */
  163.   Option.write_result = 0;            /* Don't write results to file */
  164.  
  165.   if ((env_var = getenv("PR_prcs")) != NULL) 
  166.     Option.print_scene = atoi(env_var);
  167.   if ((env_var = getenv("PR_amb")) != NULL) 
  168.     Option.ambient = atoi(env_var);
  169.   if ((env_var = getenv("PR_grid")) != NULL) 
  170.     Option.grid = atoi(env_var);
  171.   if ((env_var = getenv("PR_pgrid")) != NULL) 
  172.     Option.poly_grid = atoi(env_var);
  173.   if (Option.poly_grid) Option.grid = TRUE;
  174.   if ((env_var = getenv("PR_debug")) != NULL) 
  175.     Option.debug = atoi(env_var);
  176.   if ((env_var = getenv("PR_walk")) != NULL) 
  177.     Option.write_result = atoi(env_var);
  178.  
  179.   /* Set radiosity options */
  180.   SetRadParams();
  181.   SetFFOptions(argv);
  182.   ParseArgs(argc,argv);
  183.   
  184.   /* Set display options */
  185.   if ((env_var = getenv("PR_display")) != NULL) 
  186.     Option.show_pr_steps=atoi(env_var);
  187.   if (Option.ff_raytrace) {
  188.     Option.rad_interp_type = INTERP_VTX_FROM_VTX;
  189.   } else 
  190.     Option.rad_interp_type = INTERP_VTX_FROM_PATCH;    
  191.  
  192.   SetFilenames(Option.meshfilename);
  193.   if (Option.statistics)
  194.     if (Option.device == FILES)
  195.       LogStats(1);
  196. }
  197.  
  198. /**********************************************************************/
  199. /* Set output filenames                                               */
  200. /**********************************************************************/
  201. void SetFilenames(fname)
  202.      char *fname;
  203. {
  204.   Option.StatFilename = "                                        ";
  205.   Option.InLogFilename = "                                        ";
  206.   Option.OutLogFilename = "                                        ";
  207.   Option.DebugFilename = "                                        ";
  208.   Option.OutSceneFilename = "                                        ";
  209.  
  210.   sprintf(Option.StatFilename,"%s.stat",fname);   /* Statistics log */
  211.   sprintf(Option.InLogFilename,"%s.ilog",fname);  /* Input log */
  212.   sprintf(Option.OutLogFilename,"%s.olog",fname); /* Output log */
  213.   sprintf(Option.OutSceneFilename,"%s.scene",fname); /* Output scene */
  214.   sprintf(Option.DebugFilename, "%s.dbg", fname); /* Log of debug */
  215. }
  216.