home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume23 / rayshade / patch02 < prev    next >
Text File  |  1991-10-19  |  33KB  |  1,126 lines

  1. Newsgroups: comp.sources.misc
  2. From: Craig Kolb <rayshade-request@cs.princeton.edu>
  3. Subject:  v23i076:  rayshade - A raytracing package for UNIX, Patch02
  4. Message-ID: <1991Oct19.024427.13846@sparky.imd.sterling.com>
  5. X-Md4-Signature: 4db8ab9ca39acf91c502a974708a9228
  6. Date: Sat, 19 Oct 1991 02:44:27 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: Craig Kolb <rayshade-request@cs.princeton.edu>
  10. Posting-number: Volume 23, Issue 76
  11. Archive-name: rayshade/patch02
  12. Environment: UNIX
  13. Patch-To: rayshade: Volume 21, Issue 3-22
  14.  
  15. System: rayshade version 4.0
  16. Patch #: 2
  17. Priority: HIGH
  18.  
  19. Description:
  20.     See patch #1.
  21.  
  22. Fix:    From rn, say "| patch -p -N -d DIR", where DIR is your rayshade source
  23.     directory.  Outside of rn, say "cd DIR; patch -p -N <thisarticle".
  24.     If you don't have the patch program, apply the following by hand,
  25.     or get patch (version 2.0, latest patchlevel).
  26.  
  27.     After patching:
  28.         Configure -d
  29.         make depend
  30.         make
  31.  
  32.     If patch indicates that patchlevel is the wrong version, you may need
  33.     to apply one or more previous patches, or the patch may already
  34.     have been applied.  See the patchlevel.h file to find out what has or
  35.     has not been applied.  In any event, don't continue with the patch.
  36.  
  37.     If you are missing previous patches (hah!), they can be obtained
  38.     through anonymous ftp from weedeater.math.yale.edu.  Questions
  39.     and problems should be addressed to:
  40.  
  41.         rayshade-request@cs.princeton.edu
  42.  
  43.  
  44. Index: patchlevel.h
  45. Prereq: 1
  46. 1c1
  47. < #define PATCHLEVEL 1
  48. ---
  49. > #define PATCHLEVEL 2
  50.  
  51. Index: libshade/options.h
  52. Prereq: 4.0
  53. *** libshade/options.h.old    1991/07/17 14:46:54
  54. --- libshade/options.h    1991/09/29 15:51:17
  55. ***************
  56. *** 13,21 ****
  57.    * There is no warranty or other guarantee of fitness of this software
  58.    * for any purpose.  It is provided solely "as is".
  59.    *
  60. !  * $Id: options.h,v 4.0 91/07/17 14:46:54 kolb Exp Locker: kolb $
  61.    *
  62.    * $Log:    options.h,v $
  63.    * Revision 4.0  91/07/17  14:46:54  kolb
  64.    * Initial version.
  65.    * 
  66. --- 13,24 ----
  67.    * There is no warranty or other guarantee of fitness of this software
  68.    * for any purpose.  It is provided solely "as is".
  69.    *
  70. !  * $Id: options.h,v 4.0.1.1 91/09/29 15:51:17 cek Exp Locker: cek $
  71.    *
  72.    * $Log:    options.h,v $
  73. +  * Revision 4.0.1.1  91/09/29  15:51:17  cek
  74. +  * patch1: Added window and crop options.
  75. +  * 
  76.    * Revision 4.0  91/07/17  14:46:54  kolb
  77.    * Initial version.
  78.    * 
  79. ***************
  80. *** 49,55 ****
  81.           samples_set,        /* samples overridden ... */
  82.           cutoff_set,        /* cutoff ... */
  83.           maxdepth_set,        /* adaptive depth ... */
  84. !         window_set,        /* window ... */
  85.           freq_set,        /* report frequency ... */
  86.           jitter_set,        /* use jittering */
  87.           eyesep_set,        /* eye separation ... */
  88. --- 52,59 ----
  89.           samples_set,        /* samples overridden ... */
  90.           cutoff_set,        /* cutoff ... */
  91.           maxdepth_set,        /* adaptive depth ... */
  92. !         window_set,        /* subwindow ... */
  93. !         crop_set,        /* crop window ... */
  94.           freq_set,        /* report frequency ... */
  95.           jitter_set,        /* use jittering */
  96.           eyesep_set,        /* eye separation ... */
  97. ***************
  98. *** 68,74 ****
  99.   #endif
  100.       Float    eyesep,            /* Eye separation (for Stereo mode) */
  101.           gamma,            /* Gamma value (0 == no correction) */
  102. -         xmin, xmax, ymin, ymax, /* Window range */
  103.           starttime,        /* Think about it ... */
  104.           shutterspeed,        /* time shutter is open */
  105.           framestart,        /* start time of the current frame */
  106. --- 72,77 ----
  107. ***************
  108. *** 82,87 ****
  109. --- 85,92 ----
  110.           *imgname,        /* Name of output image file */
  111.           *inputname,        /* Name of input file, NULL == stdin */
  112.           *cppargs;        /* arguments to pass to cpp */
  113. +     int    window[2][2];        /* Subwindow corners */
  114. +     Float    crop[2][2];        /* Crop window, lo/hi normalized */
  115.   #ifdef LINDA
  116.       int    workers,        /* # of worker processes */
  117.           workernum,        /* worker #, 0 == supervisor */
  118.  
  119. Index: libray/libcommon/xform.c
  120. *** libray/libcommon/xform.c.old    1991/10/04 15:51:48
  121. --- libray/libcommon/xform.c    1991/10/04 15:51:53
  122. ***************
  123. *** 0 ****
  124. --- 1,76 ----
  125. + /*
  126. +  * xform.c
  127. +  *
  128. +  * Copyright (C) 1989, 1991, Craig E. Kolb
  129. +  * All rights reserved.
  130. +  *
  131. +  * This software may be freely copied, modified, and redistributed
  132. +  * provided that this copyright notice is preserved on all copies.
  133. +  *
  134. +  * You may not distribute this software, in whole or in part, as part of
  135. +  * any commercial product without the express consent of the authors.
  136. +  * 
  137. +  * There is no warranty or other guarantee of fitness of this software
  138. +  * for any purpose.  It is provided solely "as is".
  139. +  *
  140. +  * $Id: xform.c,v 4.0.1.1 91/10/04 15:51:53 cek Exp Locker: cek $
  141. +  *
  142. +  * $Log:    xform.c,v $
  143. +  * Revision 4.0.1.1  91/10/04  15:51:53  cek
  144. +  * patch1: Initial revision.
  145. +  * 
  146. +  * Revision 4.0  1991/09/29  15:34:31  cek
  147. +  * Initial version.
  148. +  *
  149. +  */
  150. + #include "common.h"
  151. + #include "xform.h"
  152. + TransMethods *iXformMethods;
  153. + /*
  154. +  * Create and return reference to an Xform structure.
  155. +  * In this case, we return a NULL pointer, as the Xform
  156. +  * structure does not hold any data.
  157. +  */
  158. + Xform *
  159. + XformCreate()
  160. + {
  161. +     return (Xform *)NULL;
  162. + }
  163. + /*
  164. +  * Return a pointer to collection of methods for the
  165. +  * Xform transformation.
  166. +  */
  167. + TransMethods *
  168. + XformMethods()
  169. + {
  170. +     if (iXformMethods == (TransMethods *)NULL) {
  171. +         iXformMethods = (TransMethods *)Malloc(sizeof(TransMethods));
  172. +         iXformMethods->create = (TransCreateFunc *)XformCreate;
  173. +         iXformMethods->propagate = XformPropagate;
  174. +     }
  175. +     return iXformMethods;    
  176. + }
  177. + /*
  178. +  * Given an Xform structure and forward and inverse transformations,
  179. +  * propagate the information in the Xform structure to the
  180. +  * transformations.
  181. +  * In this case, the information "in" the Xform structure is
  182. +  * actually stored in the forward transformation; the Xform
  183. +  * points to NULL.
  184. +  */
  185. + void
  186. + XformPropagate(xform, trans, itrans)
  187. + Xform *xform;
  188. + RSMatrix *trans, *itrans;
  189. + {
  190. +     /*
  191. +      * The Xform methods change the forward trans
  192. +      * directly, so it's already all set.
  193. +      * Build the inverse...
  194. +      */
  195. +     MatrixInvert(trans, itrans);
  196. + }
  197.  
  198. Index: Doc/Guide/objects.tex
  199. *** Doc/Guide/objects.tex.old    1991/07/17 16:24:14
  200. --- Doc/Guide/objects.tex    1991/09/29 15:55:38
  201. ***************
  202. *** 29,35 ****
  203.   a matter of defining a special aggregate object, the World object,
  204.   which is a list of the objects in the scene.  When writing a \rayshade
  205.   input file, all objects that are instantiated outside of object-definition
  206. ! blocks are added to the World object; you need not (not should you)
  207.   define the World object explicitly in the input file.
  208.   
  209.   \section{Primitives}
  210. --- 29,35 ----
  211.   a matter of defining a special aggregate object, the World object,
  212.   which is a list of the objects in the scene.  When writing a \rayshade
  213.   input file, all objects that are instantiated outside of object-definition
  214. ! blocks are added to the World object; you need not (nor should you)
  215.   define the World object explicitly in the input file.
  216.   
  217.   \section{Primitives}
  218. ***************
  219. *** 140,152 ****
  220.   punts and equate $u$ with the $x$ coordinate of the point of intersection,
  221.   and $v$ with the $y$ coordinate.
  222.   
  223. ! \begin{defprim}{hf}{{\em file}}
  224.       Creates a height field defined by the altitude data stored
  225.       in the named {\em file}.  The height field is based upon
  226.       perturbations of the unit square in the $z=0$ plane, and is
  227.       rendered as a surface tessellated by right isosceles triangles.
  228.   \end{defprim}
  229. ! See Appendix B for a discussion of the format of a height field file.
  230.   Height field inverse mapping is straight-forward:  $u$ is the
  231.   $x$ coordinate of the point of intersection, $v$ the $y$ coordinate.
  232.   
  233. --- 140,152 ----
  234.   punts and equate $u$ with the $x$ coordinate of the point of intersection,
  235.   and $v$ with the $y$ coordinate.
  236.   
  237. ! \begin{defprim}{heightfield}{{\em file}}
  238.       Creates a height field defined by the altitude data stored
  239.       in the named {\em file}.  The height field is based upon
  240.       perturbations of the unit square in the $z=0$ plane, and is
  241.       rendered as a surface tessellated by right isosceles triangles.
  242.   \end{defprim}
  243. ! See Appendix C for a discussion of the format of a height field file.
  244.   Height field inverse mapping is straight-forward:  $u$ is the
  245.   $x$ coordinate of the point of intersection, $v$ the $y$ coordinate.
  246.   
  247.  
  248. Index: libray/libcommon/xform.h
  249. *** libray/libcommon/xform.h.old    1991/10/04 15:51:23
  250. --- libray/libcommon/xform.h    1991/10/04 15:51:33
  251. ***************
  252. *** 0 ****
  253. --- 1,50 ----
  254. + /*
  255. +  * xform.h
  256. +  *
  257. +  * Copyright (C) 1989, 1991, Craig E. Kolb
  258. +  * All rights reserved.
  259. +  *
  260. +  * This software may be freely copied, modified, and redistributed
  261. +  * provided that this copyright notice is preserved on all copies.
  262. +  *
  263. +  * You may not distribute this software, in whole or in part, as part of
  264. +  * any commercial product without the express consent of the authors.
  265. +  * 
  266. +  * There is no warranty or other guarantee of fitness of this software
  267. +  * for any purpose.  It is provided solely "as is".
  268. +  *
  269. +  * $Id: xform.h,v 4.0.1.1 91/10/04 15:51:33 cek Exp Locker: cek $
  270. +  *
  271. +  * $Log:    xform.h,v $
  272. +  * Revision 4.0.1.1  91/10/04  15:51:33  cek
  273. +  * patch1: Initial revision.
  274. +  * 
  275. +  * Revision 4.0  1991/09/29  15:33:56  cek
  276. +  * Initial version.
  277. +  *
  278. +  */
  279. + #ifndef XFORM_H
  280. + #define XFORM_H
  281. + #define TransXformCreate()    TransCreate((TransRef)XformCreate(), XformMethods())
  282. + #define TransXformSetX0(t, v)    TransAssoc(t, &t->trans.matrix[0][0], v)
  283. + #define TransXformSetY0(t, v)    TransAssoc(t, &t->trans.matrix[0][1], v)
  284. + #define TransXformSetZ0(t, v)    TransAssoc(t, &t->trans.matrix[0][2], v)
  285. + #define TransXformSetX1(t, v)    TransAssoc(t, &t->trans.matrix[1][0], v)
  286. + #define TransXformSetY1(t, v)    TransAssoc(t, &t->trans.matrix[1][1], v)
  287. + #define TransXformSetZ1(t, v)    TransAssoc(t, &t->trans.matrix[1][2], v)
  288. + #define TransXformSetX2(t, v)    TransAssoc(t, &t->trans.matrix[2][0], v)
  289. + #define TransXformSetY2(t, v)    TransAssoc(t, &t->trans.matrix[2][1], v)
  290. + #define TransXformSetZ2(t, v)    TransAssoc(t, &t->trans.matrix[2][2], v)
  291. + #define TransXformSetXt(t, v)    TransAssoc(t, &t->trans.translate.x, v)
  292. + #define TransXformSetYt(t, v)    TransAssoc(t, &t->trans.translate.y, v)
  293. + #define TransXformSetZt(t, v)    TransAssoc(t, &t->trans.translate.z, v)
  294. + typedef char Xform;    /* Dummy; Xform has no private data. */
  295. + extern Xform *XformCreate();
  296. + extern TransMethods *XformMethods();
  297. + extern void XformPropagate();
  298. + #endif /* XFORM_H */
  299.  
  300. Index: Doc/Guide/animate.tex
  301. *** Doc/Guide/animate.tex.old    1991/07/17 15:53:07
  302. --- Doc/Guide/animate.tex    1991/09/29 15:54:45
  303. ***************
  304. *** 27,33 ****
  305.   computations are performed.
  306.   
  307.   The starting time of the current frame is computed using the
  308. ! length of each frame
  309.   the current frame number, and the starting time of the first frame.
  310.   
  311.   \begin{defkey}{shutter}{{\em t}}
  312. --- 27,33 ----
  313.   computations are performed.
  314.   
  315.   The starting time of the current frame is computed using the
  316. ! lenth of each frame
  317.   the current frame number, and the starting time of the first frame.
  318.   
  319.   \begin{defkey}{shutter}{{\em t}}
  320. ***************
  321. *** 73,79 ****
  322.   The second animated variable, {\tt frame}, is equal to the current
  323.   frame number.  Unlike the {\tt time} variable, {\tt frame} takes on
  324.   a single value for the duration of each frame.  Thus, transforms
  325. ! animated through the use of the {\tt frame} variable will not exhibit
  326.   motion blurring.
  327.   
  328.   Also supported is the {\tt linear} function.  This function uses
  329. --- 73,79 ----
  330.   The second animated variable, {\tt frame}, is equal to the current
  331.   frame number.  Unlike the {\tt time} variable, {\tt frame} takes on
  332.   a single value for the duration of each frame.  Thus, transforms
  333. ! animated through the use of the {\tt time} variable will not exhibit
  334.   motion blurring.
  335.   
  336.   Also supported is the {\tt linear} function.  This function uses
  337. ***************
  338. *** 81,87 ****
  339.   
  340.   \begin{defkey}{linear}{{\tt (} {\em Stime, Sval, Etime, Eval} {\tt )}}
  341.       Linearly interpolate between {\em Sval} at time
  342. !     {\em Stime} and {\em Eval} at time {\em Etime}.
  343.       If the current time is less than {\em Stime}, the function
  344.       returns {\em Sval}.  If the current time is greater than
  345.       {\em Etime}, {\em Eval} is returned.
  346. --- 81,87 ----
  347.   
  348.   \begin{defkey}{linear}{{\tt (} {\em Stime, Sval, Etime, Eval} {\tt )}}
  349.       Linearly interpolate between {\em Sval} at time
  350. !     {\em Stime} and {\em Etime} at time {\em Eval}.
  351.       If the current time is less than {\em Stime}, the function
  352.       returns {\em Sval}.  If the current time is greater than
  353.       {\em Etime}, {\em Eval} is returned.
  354.  
  355. Index: libray/libobj/hf.c
  356. Prereq: 4.0
  357. *** libray/libobj/hf.c.old    1991/07/17 14:38:15
  358. --- libray/libobj/hf.c    1991/09/29 15:44:53
  359. ***************
  360. *** 13,21 ****
  361.    * There is no warranty or other guarantee of fitness of this software
  362.    * for any purpose.  It is provided solely "as is".
  363.    *
  364. !  * $Id: hf.c,v 4.0 91/07/17 14:38:15 kolb Exp Locker: kolb $
  365.    *
  366.    * $Log:    hf.c,v $
  367.    * Revision 4.0  91/07/17  14:38:15  kolb
  368.    * Initial version.
  369.    * 
  370. --- 13,24 ----
  371.    * There is no warranty or other guarantee of fitness of this software
  372.    * for any purpose.  It is provided solely "as is".
  373.    *
  374. !  * $Id: hf.c,v 4.0.1.1 91/09/29 15:44:53 cek Exp Locker: cek $
  375.    *
  376.    * $Log:    hf.c,v $
  377. +  * Revision 4.0.1.1  91/09/29  15:44:53  cek
  378. +  * patch1: Error messages missing newline.
  379. +  * 
  380.    * Revision 4.0  91/07/17  14:38:15  kolb
  381.    * Initial version.
  382.    * 
  383. ***************
  384. *** 54,60 ****
  385.   
  386.       fp = fopen(filename, "r");
  387.       if (fp == (FILE *)NULL) {
  388. !         RLerror(RL_ABORT, "Cannot open heightfield file \"%s\".",
  389.                   filename);
  390.           return (Hf *)NULL;
  391.       }
  392. --- 57,63 ----
  393.   
  394.       fp = fopen(filename, "r");
  395.       if (fp == (FILE *)NULL) {
  396. !         RLerror(RL_ABORT, "Cannot open heightfield file \"%s\".\n",
  397.                   filename);
  398.           return (Hf *)NULL;
  399.       }
  400. ***************
  401. *** 72,78 ****
  402.        * Get HF size.
  403.        */
  404.       if (fread((char *)&hf->size, sizeof(int), 1, fp) == 0) {
  405. !         RLerror(RL_ABORT, "Cannot read height field size.");
  406.           return (Hf *)NULL;
  407.       }
  408.           
  409. --- 75,81 ----
  410.        * Get HF size.
  411.        */
  412.       if (fread((char *)&hf->size, sizeof(int), 1, fp) == 0) {
  413. !         RLerror(RL_ABORT, "Cannot read height field size.\n");
  414.           return (Hf *)NULL;
  415.       }
  416.           
  417. ***************
  418. *** 84,90 ****
  419.            */
  420.           if (fread((char *)hf->data[i],sizeof(float),hf->size,fp)
  421.               != hf->size) {
  422. !             RLerror(RL_ABORT, "Not enough heightfield data.");
  423.               return (Hf *)NULL;
  424.           }
  425.           for (j = 0; j < hf->size; j++) {
  426. --- 87,93 ----
  427.            */
  428.           if (fread((char *)hf->data[i],sizeof(float),hf->size,fp)
  429.               != hf->size) {
  430. !             RLerror(RL_ABORT, "Not enough heightfield data.\n");
  431.               return (Hf *)NULL;
  432.           }
  433.           for (j = 0; j < hf->size; j++) {
  434.  
  435. Index: libshade/setup.c
  436. Prereq: 4.0
  437. *** libshade/setup.c.old    1991/07/17 14:47:24
  438. --- libshade/setup.c    1991/09/29 15:52:20
  439. ***************
  440. *** 13,21 ****
  441.    * There is no warranty or other guarantee of fitness of this software
  442.    * for any purpose.  It is provided solely "as is".
  443.    *
  444. !  * $Id: setup.c,v 4.0 91/07/17 14:47:24 kolb Exp Locker: kolb $
  445.    *
  446.    * $Log:    setup.c,v $
  447.    * Revision 4.0  91/07/17  14:47:24  kolb
  448.    * Initial version.
  449.    * 
  450. --- 13,25 ----
  451.    * There is no warranty or other guarantee of fitness of this software
  452.    * for any purpose.  It is provided solely "as is".
  453.    *
  454. !  * $Id: setup.c,v 4.0.1.1 91/09/29 15:52:20 cek Exp Locker: cek $
  455.    *
  456.    * $Log:    setup.c,v $
  457. +  * Revision 4.0.1.1  91/09/29  15:52:20  cek
  458. +  * patch1: Added crop window initialization.
  459. +  * patch1: Moved RSViewing call to appropriate location.
  460. +  * 
  461.    * Revision 4.0  91/07/17  14:47:24  kolb
  462.    * Initial version.
  463.    * 
  464. ***************
  465. *** 92,99 ****
  466.       Options.cutoff.r = UNSET;
  467.       Options.cache = TRUE;
  468.       Options.shadowtransp = TRUE;
  469. !     Options.xmin = Options.ymin = 0.;
  470. !     Options.xmax = Options.ymax = 1.;
  471.       Stats.fstats = stderr;
  472.       Options.pictfile = stdout;
  473.   #ifdef URT
  474. --- 96,103 ----
  475.       Options.cutoff.r = UNSET;
  476.       Options.cache = TRUE;
  477.       Options.shadowtransp = TRUE;
  478. !     Options.crop[LOW][X] = Options.crop[LOW][Y] = 0.;
  479. !     Options.crop[HIGH][X] = Options.crop[HIGH][Y] = 1.;
  480.       Stats.fstats = stderr;
  481.       Options.pictfile = stdout;
  482.   #ifdef URT
  483. ***************
  484. *** 200,207 ****
  485.               Options.framenum);
  486.       /*
  487.        * Set up viewing parameters.
  488.        */
  489. !     RSViewing();
  490.       /*
  491.        * Initialize world
  492.        */
  493. --- 204,214 ----
  494.               Options.framenum);
  495.       /*
  496.        * Set up viewing parameters.
  497. +      * Can't animate camera yet; when possible, this will
  498. +      * need to be much smarter.
  499. +      * RSViewing();
  500.        */
  501.       /*
  502.        * Initialize world
  503.        */
  504. ***************
  505. *** 243,246 ****
  506. --- 250,257 ----
  507.        */
  508.       SamplingSetOptions(Options.samples, Options.gaussian,
  509.                  Options.filterwidth);
  510. +     /*
  511. +      * Camera is currently static; initialize it here.
  512. +      */
  513. +     RSViewing();
  514.   }
  515.  
  516. Index: libray/libobj/triangle.c
  517. Prereq: 4.0
  518. *** libray/libobj/triangle.c.old    1991/07/17 14:39:38
  519. --- libray/libobj/triangle.c    1991/09/29 15:47:11
  520. ***************
  521. *** 13,21 ****
  522.    * There is no warranty or other guarantee of fitness of this software
  523.    * for any purpose.  It is provided solely "as is".
  524.    *
  525. !  * $Id: triangle.c,v 4.0 91/07/17 14:39:38 kolb Exp Locker: kolb $
  526.    *
  527.    * $Log:    triangle.c,v $
  528.    * Revision 4.0  91/07/17  14:39:38  kolb
  529.    * Initial version.
  530.    * 
  531. --- 13,24 ----
  532.    * There is no warranty or other guarantee of fitness of this software
  533.    * for any purpose.  It is provided solely "as is".
  534.    *
  535. !  * $Id: triangle.c,v 4.0.1.1 91/09/29 15:47:11 cek Exp Locker: cek $
  536.    *
  537.    * $Log:    triangle.c,v $
  538. +  * Revision 4.0.1.1  91/09/29  15:47:11  cek
  539. +  * patch1: Potential roundoff problem in dPdU code.
  540. +  * 
  541.    * Revision 4.0  91/07/17  14:39:38  kolb
  542.    * Initial version.
  543.    * 
  544. ***************
  545. *** 399,405 ****
  546.               hi = 0; mid = 1; lo = 2;
  547.           }
  548.       }
  549. !     if (t[hi].u - t[lo].u == 0.) {
  550.           /* degenerate axis */
  551.           dpdv->x = dpdv->y = dpdv->z = 0.;
  552.       } else {
  553. --- 402,408 ----
  554.               hi = 0; mid = 1; lo = 2;
  555.           }
  556.       }
  557. !     if (fabs(t[hi].u - t[lo].u) < EPSILON) {
  558.           /* degenerate axis */
  559.           dpdv->x = dpdv->y = dpdv->z = 0.;
  560.       } else {
  561. ***************
  562. *** 439,445 ****
  563.               hi = 0; mid = 1; lo = 2;
  564.           }
  565.       }
  566. !     if (t[hi].v - t[lo].v == 0.) {
  567.           /* degenerate axis */
  568.           dpdu->x = dpdu->y = dpdu->z = 0.;
  569.       } else {
  570. --- 442,448 ----
  571.               hi = 0; mid = 1; lo = 2;
  572.           }
  573.       }
  574. !     if (fabs(t[hi].v - t[lo].v) < EPSILON) {
  575.           /* degenerate axis */
  576.           dpdu->x = dpdu->y = dpdu->z = 0.;
  577.       } else {
  578.  
  579. Index: libray/libcommon/transform.c
  580. Prereq: 4.0
  581. *** libray/libcommon/transform.c.old    1991/07/17 14:32:25
  582. --- libray/libcommon/transform.c    1991/09/29 15:37:06
  583. ***************
  584. *** 13,21 ****
  585.    * There is no warranty or other guarantee of fitness of this software
  586.    * for any purpose.  It is provided solely "as is".
  587.    *
  588. !  * $Id: transform.c,v 4.0 91/07/17 14:32:25 kolb Exp Locker: kolb $
  589.    *
  590.    * $Log:    transform.c,v $
  591.    * Revision 4.0  91/07/17  14:32:25  kolb
  592.    * Initial version.
  593.    * 
  594. --- 13,24 ----
  595.    * There is no warranty or other guarantee of fitness of this software
  596.    * for any purpose.  It is provided solely "as is".
  597.    *
  598. !  * $Id: transform.c,v 4.0.1.1 91/09/29 15:37:06 cek Exp Locker: cek $
  599.    *
  600.    * $Log:    transform.c,v $
  601. +  * Revision 4.0.1.1  91/09/29  15:37:06  cek
  602. +  * patch1: CoordSysTransform did not detect up-Z == -1.
  603. +  * 
  604.    * Revision 4.0  91/07/17  14:32:25  kolb
  605.    * Initial version.
  606.    * 
  607. ***************
  608. *** 132,137 ****
  609. --- 135,141 ----
  610.    * have unit length.  This is useful for transforming a general
  611.    * form of a primitive into a canonical, Z-axis aligned, unit size
  612.    * primitive, facilitating intersection testing.
  613. +  * Assumes that "up" is normalized.
  614.    */
  615.   void
  616.   CoordSysTransform(origin, up, r, len, trans)
  617. ***************
  618. *** 143,149 ****
  619.       Vector atmp;
  620.   
  621.       ScaleMatrix(r, r, len, &trans->trans);
  622. !     if (fabs(up->z) == 1.) {
  623.           atmp.x = 1.;
  624.           atmp.y = atmp.z = 0.;
  625.       } else {
  626. --- 147,153 ----
  627.       Vector atmp;
  628.   
  629.       ScaleMatrix(r, r, len, &trans->trans);
  630. !     if (1. - fabs(up->z) < EPSILON) {
  631.           atmp.x = 1.;
  632.           atmp.y = atmp.z = 0.;
  633.       } else {
  634.  
  635. Index: libshade/lex.l
  636. Prereq: 4.0
  637. *** libshade/lex.l.old    1991/07/17 14:46:15
  638. --- libshade/lex.l    1991/10/08 20:25:59
  639. ***************
  640. *** 11,17 ****
  641.   /* There is no warranty or other guarantee of fitness of this software       */
  642.   /* for any purpose.  It is provided solely "as is".               */
  643.   /*                                       */
  644. ! /* $Id: lex.l,v 4.0 91/07/17 14:46:15 kolb Exp Locker: kolb $ */
  645.   %{
  646.   #include "config.h"
  647.   #include "rayshade.h"
  648. --- 11,17 ----
  649.   /* There is no warranty or other guarantee of fitness of this software       */
  650.   /* for any purpose.  It is provided solely "as is".               */
  651.   /*                                       */
  652. ! /* $Id: lex.l,v 4.0.1.2 91/10/08 20:25:59 cek Exp Locker: cek $ */
  653.   %{
  654.   #include "config.h"
  655.   #include "rayshade.h"
  656. ***************
  657. *** 36,42 ****
  658.   string    {alpha}({alpha}|{digit}|{special})*
  659.   filename "/"?"/"?(("."|".."|{string})"/")*{string}
  660.   %p 9400
  661. ! %e 1200
  662.   %n 600
  663.   %%
  664.   [ \t\n]            ;
  665. --- 36,42 ----
  666.   string    {alpha}({alpha}|{digit}|{special})*
  667.   filename "/"?"/"?(("."|".."|{string})"/")*{string}
  668.   %p 9400
  669. ! %e 1500
  670.   %n 600
  671.   %%
  672.   [ \t\n]            ;
  673. ***************
  674. *** 58,63 ****
  675. --- 58,64 ----
  676.   cone            return tCONE;
  677.   component        return tCOMPONENT;
  678.   contrast        return tCONTRAST;
  679. + crop            return tCROP;
  680.   cursurf            return tCURSURF;
  681.   cutoff            return tCUTOFF;
  682.   cylinder        return tCYL;
  683. ***************
  684. *** 146,151 ****
  685. --- 147,153 ----
  686.   up            return tUP;
  687.   uv            return tUV;
  688.   verbose            return tVERBOSE;
  689. + window            return tWINDOW;
  690.   windy            return tWINDY;
  691.   wood            return tWOOD;
  692.   {digit}+ |
  693.  
  694. Index: libray/libobj/geom.c
  695. Prereq: 4.0
  696. *** libray/libobj/geom.c.old    1991/07/17 14:37:47
  697. --- libray/libobj/geom.c    1991/09/29 15:43:15
  698. ***************
  699. *** 13,21 ****
  700.    * There is no warranty or other guarantee of fitness of this software
  701.    * for any purpose.  It is provided solely "as is".
  702.    *
  703. !  * $Id: geom.c,v 4.0 91/07/17 14:37:47 kolb Exp Locker: kolb $
  704.    *
  705.    * $Log:    geom.c,v $
  706.    * Revision 4.0  91/07/17  14:37:47  kolb
  707.    * Initial version.
  708.    * 
  709. --- 13,24 ----
  710.    * There is no warranty or other guarantee of fitness of this software
  711.    * for any purpose.  It is provided solely "as is".
  712.    *
  713. !  * $Id: geom.c,v 4.0.1.1 91/09/29 15:43:15 cek Exp Locker: cek $
  714.    *
  715.    * $Log:    geom.c,v $
  716. +  * Revision 4.0.1.1  91/09/29  15:43:15  cek
  717. +  * patch1: GeomBounds now inflates bounds by EPSILON.
  718. +  * 
  719.    * Revision 4.0  91/07/17  14:37:47  kolb
  720.    * Initial version.
  721.    * 
  722. ***************
  723. *** 238,243 ****
  724. --- 241,252 ----
  725.           RLerror(RL_ABORT, "Can't compute bounds of \"%s\".\n",
  726.               GeomName(obj));
  727.       (*obj->methods->bounds) (obj->obj, bounds);
  728. +     bounds[LOW][X] -= EPSILON;
  729. +     bounds[LOW][Y] -= EPSILON;
  730. +     bounds[LOW][Z] -= EPSILON;
  731. +     bounds[HIGH][X] += EPSILON;
  732. +     bounds[HIGH][Y] += EPSILON;
  733. +     bounds[HIGH][Z] += EPSILON;
  734.       if (obj->trans) {
  735.           for (trans = obj->trans; trans; trans = trans->next)
  736.               BoundsTransform(&trans->trans, bounds);
  737.  
  738. Index: Configure
  739. Prereq: 2.0.1.5
  740. *** Configure.old    1991/09/29 16:02:47
  741. --- Configure    1991/10/10 18:39:55
  742. ***************
  743. *** 16,22 ****
  744.   # my version which slightly differs from the original written by
  745.   # Larry Wall.)
  746.  
  747. ! # $Id: Head.U,v 2.0.1.5 91/01/25 10:19:15 ram Exp $
  748.   
  749.   : save PATH defined by user
  750.   user_path=$PATH
  751. --- 16,22 ----
  752.   # my version which slightly differs from the original written by
  753.   # Larry Wall.)
  754.   
  755. ! # $Id: Configure,v 4.0.1.1 91/10/10 18:39:55 cek Exp Locker: cek $
  756.   
  757.   : save PATH defined by user
  758.   user_path=$PATH
  759. ***************
  760. *** 369,375 ****
  761.   
  762.   Much effort has been expended to ensure that this shell script will run on
  763.   any Unix system. If despite that it blows up on you, your best bet is to edit
  764. ! Configure and run it again. Also, let me (rayshade@weedeater.math.yale.edu)
  765.   know how I blew it. If you can't run Configure for some reason, you'll have
  766.   to generate a config.sh file by hand.
  767.   
  768. --- 369,375 ----
  769.   
  770.   Much effort has been expended to ensure that this shell script will run on
  771.   any Unix system. If despite that it blows up on you, your best bet is to edit
  772. ! Configure and run it again. Also, let me (rayshade-request@cs.princeton.edu)
  773.   know how I blew it. If you can't run Configure for some reason, you'll have
  774.   to generate a config.sh file by hand.
  775.   
  776.  
  777. Index: libshade/funcdefs.h
  778. Prereq: 4.0
  779. *** libshade/funcdefs.h.old    1991/07/17 14:46:11
  780. --- libshade/funcdefs.h    1991/09/29 15:50:07
  781. ***************
  782. *** 13,21 ****
  783.    * There is no warranty or other guarantee of fitness of this software
  784.    * for any purpose.  It is provided solely "as is".
  785.    *
  786. !  * $Id: funcdefs.h,v 4.0 91/07/17 14:46:11 kolb Exp Locker: kolb $
  787.    *
  788.    * $Log:    funcdefs.h,v $
  789.    * Revision 4.0  91/07/17  14:46:11  kolb
  790.    * Initial version.
  791.    * 
  792. --- 13,24 ----
  793.    * There is no warranty or other guarantee of fitness of this software
  794.    * for any purpose.  It is provided solely "as is".
  795.    *
  796. !  * $Id: funcdefs.h,v 4.0.1.1 91/09/29 15:50:07 cek Exp Locker: cek $
  797.    *
  798.    * $Log:    funcdefs.h,v $
  799. +  * Revision 4.0.1.1  91/09/29  15:50:07  cek
  800. +  * patch1: Don't declare free or exit void if stdlib.h is used.
  801. +  * 
  802.    * Revision 4.0  91/07/17  14:46:11  kolb
  803.    * Initial version.
  804.    * 
  805. ***************
  806. *** 32,38 ****
  807.   /*
  808.    * Misc. routines.
  809.    */
  810. ! extern void    free(), exit(), get_cpu_time(),
  811. !         read_input_file();
  812.   
  813.   #endif /* FUNCDEFS_H */
  814. --- 35,44 ----
  815.   /*
  816.    * Misc. routines.
  817.    */
  818. ! #ifndef I_STDLIB
  819. ! extern void    free(), exit();
  820. ! #endif
  821. ! extern void get_cpu_time(), read_input_file();
  822.   
  823.   #endif /* FUNCDEFS_H */
  824.  
  825. Index: libray/liblight/shadow.c
  826. Prereq: 4.0
  827. *** libray/liblight/shadow.c.old    1991/07/17 14:35:34
  828. --- libray/liblight/shadow.c    1991/09/29 15:40:57
  829. ***************
  830. *** 13,21 ****
  831.    * There is no warranty or other guarantee of fitness of this software
  832.    * for any purpose.  It is provided solely "as is".
  833.    *
  834. !  * $Id: shadow.c,v 4.0 91/07/17 14:35:34 kolb Exp Locker: kolb $
  835.    *
  836.    * $Log:    shadow.c,v $
  837.    * Revision 4.0  91/07/17  14:35:34  kolb
  838.    * Initial version.
  839.    * 
  840. --- 13,24 ----
  841.    * There is no warranty or other guarantee of fitness of this software
  842.    * for any purpose.  It is provided solely "as is".
  843.    *
  844. !  * $Id: shadow.c,v 4.0.1.1 91/09/29 15:40:57 cek Exp Locker: cek $
  845.    *
  846.    * $Log:    shadow.c,v $
  847. +  * Revision 4.0.1.1  91/09/29  15:40:57  cek
  848. +  * patch1: ShadowOptions was incorrectly externed.
  849. +  * 
  850.    * Revision 4.0  91/07/17  14:35:34  kolb
  851.    * Initial version.
  852.    * 
  853. ***************
  854. *** 236,241 ****
  855. --- 239,245 ----
  856.   
  857.   void
  858.   ShadowSetOptions(options)
  859. + long options;
  860.   {
  861.       ShadowOptions = options;
  862.   }
  863. ***************
  864. *** 247,253 ****
  865.   {
  866.       HitNode *np;
  867.       int i, n;
  868. !     extern int ShadowOptions;
  869.   
  870.       i = 0;
  871.   
  872. --- 251,257 ----
  873.   {
  874.       HitNode *np;
  875.       int i, n;
  876. !     extern long ShadowOptions;
  877.   
  878.       i = 0;
  879.   
  880.  
  881. Index: libray/libcommon/vecmath.c
  882. Prereq: 4.0
  883. *** libray/libcommon/vecmath.c.old    1991/07/17 14:33:02
  884. --- libray/libcommon/vecmath.c    1991/09/29 15:38:41
  885. ***************
  886. *** 13,21 ****
  887.    * There is no warranty or other guarantee of fitness of this software
  888.    * for any purpose.  It is provided solely "as is".
  889.    *
  890. !  * $Id: vecmath.c,v 4.0 91/07/17 14:33:02 kolb Exp Locker: kolb $
  891.    *
  892.    * $Log:    vecmath.c,v $
  893.    * Revision 4.0  91/07/17  14:33:02  kolb
  894.    * Initial version.
  895.    * 
  896. --- 13,24 ----
  897.    * There is no warranty or other guarantee of fitness of this software
  898.    * for any purpose.  It is provided solely "as is".
  899.    *
  900. !  * $Id: vecmath.c,v 4.0.1.1 91/09/29 15:38:41 cek Exp Locker: cek $
  901.    *
  902.    * $Log:    vecmath.c,v $
  903. +  * Revision 4.0.1.1  91/09/29  15:38:41  cek
  904. +  * patch1: Fixed floating-point compare in normalization code.
  905. +  * 
  906.    * Revision 4.0  91/07/17  14:33:02  kolb
  907.    * Initial version.
  908.    * 
  909. ***************
  910. *** 32,38 ****
  911.       Float d;
  912.   
  913.       d = sqrt(a->x*a->x + a->y*a->y + a->z*a->z);
  914. !     if(d == 0.)
  915.           return 0.;
  916.       a->x /= d;
  917.       a->y /= d;
  918. --- 35,41 ----
  919.       Float d;
  920.   
  921.       d = sqrt(a->x*a->x + a->y*a->y + a->z*a->z);
  922. !     if (equal(d, 0.))
  923.           return 0.;
  924.       a->x /= d;
  925.       a->y /= d;
  926.  
  927. Index: libray/libcommon/color.h
  928. Prereq: 4.0
  929. *** libray/libcommon/color.h.old    1991/07/17 14:30:08
  930. --- libray/libcommon/color.h    1991/09/29 15:32:09
  931. ***************
  932. *** 13,21 ****
  933.    * There is no warranty or other guarantee of fitness of this software
  934.    * for any purpose.  It is provided solely "as is".
  935.    *
  936. !  * $Id: color.h,v 4.0 91/07/17 14:30:08 kolb Exp Locker: kolb $
  937.    *
  938.    * $Log:    color.h,v $
  939.    * Revision 4.0  91/07/17  14:30:08  kolb
  940.    * Initial version.
  941.    * 
  942. --- 13,24 ----
  943.    * There is no warranty or other guarantee of fitness of this software
  944.    * for any purpose.  It is provided solely "as is".
  945.    *
  946. !  * $Id: color.h,v 4.0.1.1 91/09/29 15:32:09 cek Exp Locker: cek $
  947.    *
  948.    * $Log:    color.h,v $
  949. +  * Revision 4.0.1.1  91/09/29  15:32:09  cek
  950. +  * patch1: Fixed #endif typo.
  951. +  * 
  952.    * Revision 4.0  91/07/17  14:30:08  kolb
  953.    * Initial version.
  954.    * 
  955. ***************
  956. *** 44,47 ****
  957.   #define ColorAdd(x,y,a)            (a)->r = (x).r+(y).r, \
  958.                       (a)->g = (x).g+(y).g, \
  959.                       (a)->b = (x).b+(y).b
  960. ! #endif COLOR_H
  961. --- 47,50 ----
  962.   #define ColorAdd(x,y,a)            (a)->r = (x).r+(y).r, \
  963.                       (a)->g = (x).g+(y).g, \
  964.                       (a)->b = (x).b+(y).b
  965. ! #endif /* COLOR_H */
  966.  
  967. Index: Doc/Guide/texture.tex
  968. *** Doc/Guide/texture.tex.old    1991/07/17 14:24:45
  969. --- Doc/Guide/texture.tex    1991/09/29 15:57:34
  970. ***************
  971. *** 251,258 ****
  972.   \end{defkey}
  973.   The inverse mapping method for each primitive is described in Chapter 5.
  974.   
  975. ! \begin{defkey}{map}{{\tt linear} [\evec{origin} \evec{vaxis} \evec{uaxis}]}
  976. !     Use a linear mapping method. The 2D texture is transformed
  977.       so that its $u$ axis is given by \evec{uaxis} and its $v$
  978.       axis by $vaxis$.  The texture is projected along the vector
  979.       defined by the cross product of the $u$ and $v$ axes, with
  980. --- 251,258 ----
  981.   \end{defkey}
  982.   The inverse mapping method for each primitive is described in Chapter 5.
  983.   
  984. ! \begin{defkey}{map}{{\tt planar} [\evec{origin} \evec{vaxis} \evec{uaxis}]}
  985. !     Use a planar mapping method. The 2D texture is transformed
  986.       so that its $u$ axis is given by \evec{uaxis} and its $v$
  987.       axis by $vaxis$.  The texture is projected along the vector
  988.       defined by the cross product of the $u$ and $v$ axes, with
  989.  
  990. Index: Doc/Guide/surfaces.tex
  991. *** Doc/Guide/surfaces.tex.old    1991/07/17 14:24:41
  992. --- Doc/Guide/surfaces.tex    1991/09/29 15:57:02
  993. ***************
  994. *** 221,228 ****
  995.       /*
  996.        * Mirrored ball and cylinder sitting on 'default' plane.
  997.        */
  998. !     surface mirror .01 .01 .01  diffuse .05 .05 .05
  999. !             specular .8 .8 .8 speccoef 20  reflect 0.95
  1000.       plane 0 0 0  0 0 1
  1001.       applysurf mirror
  1002.       sphere 1 0 0 0
  1003. --- 221,229 ----
  1004.       /*
  1005.        * Mirrored ball and cylinder sitting on 'default' plane.
  1006.        */
  1007. !     surface mirror ambient .01 .01 .01
  1008. !             diffuse .05 .05 .05
  1009. !             specular .8 .8 .8 specpow 20  reflect 0.95
  1010.       plane 0 0 0  0 0 1
  1011.       applysurf mirror
  1012.       sphere 1 0 0 0
  1013.  
  1014. Index: Doc/Guide/options.tex
  1015. *** Doc/Guide/options.tex.old    1991/07/17 14:24:30
  1016. --- Doc/Guide/options.tex    1991/09/29 15:56:29
  1017. ***************
  1018. *** 132,145 ****
  1019.   in the input file.  By default, \rayshade traces shadow
  1020.   rays through non-opaque objects.
  1021.   
  1022. - \begin{defkey}{-P}{{\em depth}}
  1023. -     Use adaptive supersampling with the given
  1024. -     maximum depth.
  1025. - \end{defkey}
  1026. - This option overrides the {\tt jittered} keyword and the
  1027. - value associated the
  1028. - {\tt adaptive} keyword given in the input file, if any.
  1029.   \begin{defkey}{-P}{}
  1030.       Specify the options that should be passed to the C
  1031.       preprocessor.
  1032. --- 132,137 ----
  1033.  
  1034. Index: libray/libcommon/Makefile.SH
  1035. *** libray/libcommon/Makefile.SH.old    1991/07/17 14:29:58
  1036. --- libray/libcommon/Makefile.SH    1991/09/29 15:39:27
  1037. ***************
  1038. *** 35,41 ****
  1039.   CFLAGS = $(CCFLAGS) $(INCLUDE) $(OPTIMIZE)
  1040.   SHELL = /bin/sh
  1041.   
  1042. ! CFILES = memory.c expr.c transform.c rotate.c sampling.c scale.c translate.c vecmath.c
  1043.   OFILES = $(CFILES:.c=.o)
  1044.   
  1045.   $(LIB): $(OFILES)
  1046. --- 35,42 ----
  1047.   CFLAGS = $(CCFLAGS) $(INCLUDE) $(OPTIMIZE)
  1048.   SHELL = /bin/sh
  1049.   
  1050. ! CFILES = memory.c expr.c transform.c rotate.c sampling.c scale.c translate.c \
  1051. !     vecmath.c xform.c
  1052.   OFILES = $(CFILES:.c=.o)
  1053.   
  1054.   $(LIB): $(OFILES)
  1055.  
  1056. Index: Makefile
  1057. Prereq: 4.0
  1058. *** Makefile.old    1991/07/17 14:27:06
  1059. --- Makefile    1991/10/10 18:33:14
  1060. ***************
  1061. *** 2,9 ****
  1062.   # Makefile for rayshade distribution
  1063.   # C. Kolb 1/91
  1064.   #
  1065. ! # $Id: Makefile,v 4.0 91/07/17 14:27:06 kolb Exp Locker: kolb $
  1066.   #
  1067.   STUFF = libray libshade rayshade etc
  1068.   SHELL = /bin/sh
  1069.   
  1070. --- 2,11 ----
  1071.   # Makefile for rayshade distribution
  1072.   # C. Kolb 1/91
  1073.   #
  1074. ! # $Id: Makefile,v 4.0.1.1 91/10/10 18:33:14 cek Exp Locker: cek $
  1075.   #
  1076. + MAKE = make -$(MAKEFLAGS)
  1077.   STUFF = libray libshade rayshade etc
  1078.   SHELL = /bin/sh
  1079.   
  1080.  
  1081. Index: libray/Makefile
  1082. Prereq: 4.0
  1083. *** libray/Makefile.old    1991/07/17 14:29:47
  1084. --- libray/Makefile    1991/10/10 18:33:41
  1085. ***************
  1086. *** 2,9 ****
  1087.   # Makefile for libray
  1088.   # C. Kolb 1/91
  1089.   #
  1090. ! # $Id: Makefile,v 4.0 91/07/17 14:29:47 kolb Exp Locker: kolb $
  1091.   #
  1092.   STUFF = libcommon libobj libimage liblight libsurf libtext
  1093.   SHELL = /bin/sh
  1094.   
  1095. --- 2,10 ----
  1096.   # Makefile for libray
  1097.   # C. Kolb 1/91
  1098.   #
  1099. ! # $Id: Makefile,v 4.0.1.1 91/10/10 18:33:41 cek Exp Locker: cek $
  1100.   #
  1101. + MAKE = make -$(MAKEFLAGS)
  1102.   STUFF = libcommon libobj libimage liblight libsurf libtext
  1103.   SHELL = /bin/sh
  1104.   
  1105. *** End of Patch 2 ***
  1106.  
  1107. exit 0 # Just in case...
  1108. -- 
  1109. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  1110. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  1111. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  1112. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  1113.