home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume21 / rayshade / part06 (.txt) < prev    next >
LaTeX Document  |  1991-07-21  |  56KB  |  1,731 lines

  1. Newsgroups: comp.sources.misc
  2. From: Rayshade Construction Co. <rayshade@weedeater.math.YALE.EDU>
  3. Subject:  v21i009:  rayshade - A raytracing package for UNIX, Part06/19
  4. Message-ID: <1991Jul20.043456.11477@sparky.IMD.Sterling.COM>
  5. X-Md4-Signature: 9460758b6d1b7446ee76a8e036ff510a
  6. Date: Sat, 20 Jul 1991 04:34:56 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8. Submitted-by: Rayshade Construction Co. <rayshade@weedeater.math.YALE.EDU>
  9. Posting-number: Volume 21, Issue 9
  10. Archive-name: rayshade/part06
  11. Environment: UNIX, !16BIT
  12. #! /bin/sh
  13. # This is a shell archive.  Remove anything before this line, then unpack
  14. # it by saving it into a file and typing "sh file".  To overwrite existing
  15. # files, type "sh file -c".  You can also feed this as standard input via
  16. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  17. # will see the following message at the end:
  18. #        "End of archive 6 (of 19)."
  19. # Contents:  Doc/Guide/intro.tex Examples/planet.map
  20. #   libray/liblight/extended.c libray/libobj/hf.h libray/libobj/list.c
  21. #   libray/libobj/plane.c libray/libsurf/fogdeck.c
  22. #   libray/libtext/cloud.c libray/libtext/stripe.c
  23. #   libshade/Makefile.SH libshade/surfdef.c raypaint/Makefile.SH
  24. #   raypaint/glgraphics.c raypaint/main.c rayshade/Makefile.SH
  25. #   rayview/Makefile.SH
  26. # Wrapped by kolb@woody on Wed Jul 17 17:56:45 1991
  27. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  28. if test -f 'Doc/Guide/intro.tex' -a "${1}" != "-c" ; then 
  29.   echo shar: Will not clobber existing file \"'Doc/Guide/intro.tex'\"
  30. echo shar: Extracting \"'Doc/Guide/intro.tex'\" \(2585 characters\)
  31. sed "s/^X//" >'Doc/Guide/intro.tex' <<'END_OF_FILE'
  32. X\chapter{Introduction}
  33. X\pagenumbering{arabic}
  34. XThis document describes \rayshade in enough detail to enable
  35. Xthe technical-minded to
  36. Xsit down and render some images.  In its current form,
  37. Xit is truly a draft, and even then
  38. Xmore of a reference manual than a proper user's guide.
  39. XThis document does not provide any kind of thorough introduction
  40. Xto the basics of computer graphics or ray tracing.
  41. XThere are many other excellent sources for this kind of information.
  42. XThe technical and coding details of \rayshade and
  43. Xits libraries will be documented elsewhere.
  44. X\section{Getting Started}
  45. XThe best way to learn how to use \rayshade is to dive right in and
  46. Xstart making pictures.  Study the example
  47. Xinput files that are packaged with {\em rayshade}.  Run them through
  48. Xrayshade to see what the images they produce look like.
  49. XChange the input files; move the camera,
  50. Xchange the field of view, modify surface properties, and see what differences
  51. Xyour changes make, all the while referring to the appropriate portions
  52. Xof this document.  Browse through the individual chapters
  53. Xto see what \rayshade can and cannot do.  The \rayshade quick reference
  54. Xguide may also help you sort out syntactical nasties.
  55. XThroughout this text, the {\tt typewriter} type style is used to indicate
  56. Xkeywords and other items that should be passed
  57. Xdirectly {\em rayshade}.  Where appropriate,
  58. Xitems in an {\em italic\/} style indicate
  59. Xplaces where you should provide an appropriate number or string.
  60. XVectors, which consist of three numerical values, are indicated by
  61. Xan arrow over a name written in italic type style, e.g., \evec{vector}.
  62. XItems enclosed between {\tt [} and {\tt ]} characters indicate
  63. Xthat specifying those items is optional.
  64. XComplex constructions that are
  65. Xdescribed elsewhere in the text, such as surface or object specification,
  66. Xare denoted by enclosing descriptive text between 
  67. X{\tt $<$} and {\tt $>$} characters.
  68. X\section{A Simple Example}
  69. XBecause \rayshade provides a default camera description, surface properties,
  70. Xand a default light
  71. Xsource, it is easy to construct short input files that allow you to
  72. Xexperiment with objects, textures, and transformations.
  73. XIf you haven't already run \rayshade on one of the example input files,
  74. Xyou might want to try producing an image using the following input:
  75. X\begin{verbatim}
  76. X   sphere 2 0 0 0
  77. X\end{verbatim}
  78. XIf you are running \rayshade on a UNIX\footnote{UNIX is a trademark
  79. Xof AT\&T Bell Laboratories}-like machine, the command:
  80. X\begin{verbatim}
  81. X  echo "sphere 2 0 0 0" | rayshade > sphere.rle
  82. X\end{verbatim}
  83. Xshould produce an image of a sphere.
  84. END_OF_FILE
  85. if test 2585 -ne `wc -c <'Doc/Guide/intro.tex'`; then
  86.     echo shar: \"'Doc/Guide/intro.tex'\" unpacked with wrong size!
  87. # end of 'Doc/Guide/intro.tex'
  88. if test -f 'Examples/planet.map' -a "${1}" != "-c" ; then 
  89.   echo shar: Will not clobber existing file \"'Examples/planet.map'\"
  90. echo shar: Extracting \"'Examples/planet.map'\" \(2551 characters\)
  91. sed "s/^X//" >'Examples/planet.map' <<'END_OF_FILE'
  92. X40 128 200
  93. X40 128 200
  94. X41 129 201
  95. X42 130 202
  96. X43 131 202
  97. X44 132 203
  98. X45 133 204
  99. X46 134 204
  100. X47 135 205
  101. X48 136 206
  102. X48 136 206
  103. X49 137 207
  104. X50 138 208
  105. X51 139 209
  106. X52 140 209
  107. X53 141 210
  108. X54 142 211
  109. X55 143 211
  110. X56 144 212
  111. X57 145 213
  112. X57 145 213
  113. X58 146 214
  114. X59 147 215
  115. X60 148 216
  116. X61 149 216
  117. X62 150 217
  118. X63 151 218
  119. X64 152 218
  120. X65 153 219
  121. X66 154 220
  122. X66 154 220
  123. X67 155 221
  124. X68 156 222
  125. X69 157 222
  126. X70 158 223
  127. X71 159 224
  128. X72 160 225
  129. X73 161 225
  130. X74 162 226
  131. X75 163 227
  132. X75 163 227
  133. X76 164 228
  134. X77 165 229
  135. X78 166 229
  136. X79 167 230
  137. X80 168 231
  138. X81 169 232
  139. X82 170 232
  140. X83 171 233
  141. X84 172 234
  142. X84 172 234
  143. X85 173 235
  144. X86 174 236
  145. X87 175 236
  146. X88 176 237
  147. X89 177 238
  148. X90 178 238
  149. X91 179 239
  150. X92 180 240
  151. X93 181 241
  152. X93 181 241
  153. X94 182 242
  154. X95 183 243
  155. X96 184 243
  156. X97 185 244
  157. X98 186 245
  158. X99 187 245
  159. X100 188 246
  160. X101 189 247
  161. X102 190 248
  162. X102 190 248
  163. X103 191 249
  164. X104 192 250
  165. X105 193 250
  166. X106 194 251
  167. X107 195 252
  168. X108 196 252
  169. X109 197 253
  170. X110 198 254
  171. X111 199 255
  172. X244 211 1
  173. X240 211 1
  174. X237 211 1
  175. X234 211 1
  176. X231 211 1
  177. X228 211 1
  178. X224 211 1
  179. X221 211 1
  180. X218 211 1
  181. X215 211 1
  182. X212 211 1
  183. X209 211 1
  184. X205 211 1
  185. X202 211 1
  186. X199 211 1
  187. X196 211 1
  188. X193 211 1
  189. X190 211 1
  190. X186 211 1
  191. X183 211 1
  192. X180 211 1
  193. X177 211 1
  194. X174 211 1
  195. X171 211 1
  196. X132 208 1
  197. X129 206 1
  198. X125 204 1
  199. X122 201 1
  200. X119 199 1
  201. X115 197 1
  202. X112 194 1
  203. X108 192 1
  204. X105 190 1
  205. X102 187 1
  206. X98 185 1
  207. X95 183 1
  208. X91 180 1
  209. X88 178 1
  210. X84 176 1
  211. X81 173 1
  212. X78 171 1
  213. X74 169 1
  214. X71 166 1
  215. X67 164 1
  216. X64 162 1
  217. X61 159 1
  218. X57 157 1
  219. X54 155 1
  220. X50 152 1
  221. X47 150 1
  222. X44 148 1
  223. X40 145 1
  224. X37 143 1
  225. X33 141 1
  226. X30 138 1
  227. X27 136 1
  228. X23 134 1
  229. X20 131 1
  230. X16 129 1
  231. X13 127 1
  232. X10 124 1
  233. X6 122 1
  234. X3 120 1
  235. X0 118 1
  236. X3 116 1
  237. X6 115 1
  238. X9 113 1
  239. X12 112 1
  240. X15 110 1
  241. X18 109 1
  242. X21 107 1
  243. X25 106 1
  244. X28 104 1
  245. X31 103 1
  246. X34 101 1
  247. X37 100 1
  248. X40 98 1
  249. X43 97 1
  250. X46 96 1
  251. X50 94 1
  252. X53 93 1
  253. X56 91 1
  254. X59 90 1
  255. X62 88 1
  256. X65 87 1
  257. X68 85 1
  258. X71 84 1
  259. X75 82 1
  260. X78 81 1
  261. X81 79 1
  262. X84 78 1
  263. X87 77 1
  264. X90 75 1
  265. X93 74 1
  266. X96 72 1
  267. X100 71 1
  268. X103 69 1
  269. X106 68 1
  270. X109 66 1
  271. X112 65 1
  272. X115 63 1
  273. X118 62 1
  274. X122 61 1
  275. X121 61 1
  276. X120 61 1
  277. X118 60 1
  278. X117 60 1
  279. X115 59 1
  280. X114 59 1
  281. X113 59 1
  282. X111 58 1
  283. X110 58 1
  284. X109 58 1
  285. X111 59 1
  286. X114 60 1
  287. X116 62 1
  288. X119 63 1
  289. X121 65 1
  290. X124 66 1
  291. X126 68 1
  292. X129 69 1
  293. X131 71 1
  294. X134 72 1
  295. X136 74 1
  296. X139 75 1
  297. X141 77 1
  298. X144 78 1
  299. X147 80 1
  300. X149 81 1
  301. X152 83 1
  302. X154 84 1
  303. X157 86 1
  304. X159 87 1
  305. X162 89 1
  306. X164 90 1
  307. X167 92 1
  308. X169 93 1
  309. X172 95 1
  310. X174 96 1
  311. X177 98 1
  312. X180 99 1
  313. X182 101 1
  314. X185 102 1
  315. X187 104 1
  316. X190 105 1
  317. X192 107 1
  318. X195 108 1
  319. X197 110 1
  320. X200 111 1
  321. X202 113 1
  322. X205 114 1
  323. X207 116 1
  324. X210 117 1
  325. X213 119 2
  326. X210 120 9
  327. X208 122 16
  328. X205 124 23
  329. X203 126 30
  330. X200 128 37
  331. X198 129 44
  332. X195 131 51
  333. X193 133 59
  334. X190 135 66
  335. X188 137 73
  336. X186 138 80
  337. X183 140 87
  338. X181 142 94
  339. X178 144 101
  340. X176 146 109
  341. X173 148 116
  342. X254 255 255
  343. X254 255 254
  344. X254 255 254
  345. X254 255 253
  346. X254 255 253
  347. X254 255 253
  348. END_OF_FILE
  349. if test 2551 -ne `wc -c <'Examples/planet.map'`; then
  350.     echo shar: \"'Examples/planet.map'\" unpacked with wrong size!
  351. # end of 'Examples/planet.map'
  352. if test -f 'libray/liblight/extended.c' -a "${1}" != "-c" ; then 
  353.   echo shar: Will not clobber existing file \"'libray/liblight/extended.c'\"
  354. echo shar: Extracting \"'libray/liblight/extended.c'\" \(2819 characters\)
  355. sed "s/^X//" >'libray/liblight/extended.c' <<'END_OF_FILE'
  356. X * extended.c
  357. X * Copyright (C) 1989, 1991, Craig E. Kolb
  358. X * All rights reserved.
  359. X * This software may be freely copied, modified, and redistributed
  360. X * provided that this copyright notice is preserved on all copies.
  361. X * You may not distribute this software, in whole or in part, as part of
  362. X * any commercial product without the express consent of the authors.
  363. X * There is no warranty or other guarantee of fitness of this software
  364. X * for any purpose.  It is provided solely "as is".
  365. X * $Id: extended.c,v 4.0 91/07/17 14:34:03 kolb Exp Locker: kolb $
  366. X * $Log:    extended.c,v $
  367. X * Revision 4.0  91/07/17  14:34:03  kolb
  368. X * Initial version.
  369. X#include "light.h"
  370. X#include "libcommon/sampling.h"
  371. X#include "extended.h"
  372. Xstatic LightMethods *iExtendedMethods = NULL;
  373. XExtended *
  374. XExtendedCreate(r, pos)
  375. XFloat r;
  376. XVector *pos;
  377. X    Extended *e;
  378. X    e = (Extended *)share_malloc(sizeof(Extended));
  379. X    e->pos = *pos;
  380. X    e->radius = r;
  381. X    return e;
  382. XLightMethods *
  383. XExtendedMethods()
  384. X    if (iExtendedMethods == (LightMethods *)NULL) {
  385. X        iExtendedMethods = LightMethodsCreate();
  386. X        iExtendedMethods->intens = ExtendedIntens;
  387. X        iExtendedMethods->dir = ExtendedDirection;
  388. X    return iExtendedMethods;
  389. X * Compute intensity ('color') of extended light source 'lp' from 'pos'.
  390. Xstatic int
  391. XExtendedIntens(lp, lcolor, cache, ray, dist, noshadow, color)
  392. XExtended *lp;
  393. XColor *lcolor, *color;
  394. XShadowCache *cache;
  395. XRay *ray;
  396. XFloat dist;
  397. Xint noshadow;
  398. X    int uSample, vSample, islit;
  399. X    Float jit, vbase, ubase, vpos, upos, lightdist;
  400. X    Color newcol;
  401. X    Ray newray;
  402. X    Vector Uaxis, Vaxis, ldir;
  403. X    if (noshadow) {
  404. X        *color = *lcolor;
  405. X        return TRUE;
  406. X    newray = *ray;
  407. X     * Determinte two orthoganal vectors that lay in the plane
  408. X     * whose normal is defined by the vector from the center
  409. X     * of the light source to the point of intersection and
  410. X     * passes through the center of the light source.
  411. X      */
  412. X    VecSub(lp->pos, ray->pos, &ldir);
  413. X    VecCoordSys(&ldir, &Uaxis, &Vaxis);
  414. X    jit = 2. * lp->radius * Sampling.spacing;
  415. X     * Sample a single point, determined by SampleNumber,
  416. X     * on the extended source.
  417. X     */
  418. X    vpos = -lp->radius + (ray->sample % Sampling.sidesamples)*jit;
  419. X    upos = -lp->radius + (ray->sample / Sampling.sidesamples)*jit;
  420. X    vpos += nrand() * jit;
  421. X    upos += nrand() * jit;
  422. X    VecComb(upos, Uaxis, vpos, Vaxis, &newray.dir);
  423. X    VecAdd(ldir, newray.dir, &newray.dir);
  424. X    lightdist = VecNormalize(&newray.dir);
  425. X    return !Shadowed(color, lcolor, cache, &newray,
  426. X        lightdist, noshadow);
  427. Xvoid
  428. XExtendedDirection(lp, pos, dir, dist)
  429. XExtended *lp;
  430. XVector *pos, *dir;
  431. XFloat *dist;
  432. X     * Calculate dir from position to center of
  433. X     * light source.
  434. X     */
  435. X    VecSub(lp->pos, *pos, dir);
  436. X    *dist = VecNormalize(dir);
  437. XExtendedMethodRegister(meth)
  438. XUserMethodType meth;
  439. X    if (iExtendedMethods)
  440. X        iExtendedMethods->user = meth;
  441. END_OF_FILE
  442. if test 2819 -ne `wc -c <'libray/liblight/extended.c'`; then
  443.     echo shar: \"'libray/liblight/extended.c'\" unpacked with wrong size!
  444. # end of 'libray/liblight/extended.c'
  445. if test -f 'libray/libobj/hf.h' -a "${1}" != "-c" ; then 
  446.   echo shar: Will not clobber existing file \"'libray/libobj/hf.h'\"
  447. echo shar: Extracting \"'libray/libobj/hf.h'\" \(2626 characters\)
  448. sed "s/^X//" >'libray/libobj/hf.h' <<'END_OF_FILE'
  449. X * hf.h
  450. X * Copyright (C) 1989, 1991, Craig E. Kolb
  451. X * All rights reserved.
  452. X * This software may be freely copied, modified, and redistributed
  453. X * provided that this copyright notice is preserved on all copies.
  454. X * You may not distribute this software, in whole or in part, as part of
  455. X * any commercial product without the express consent of the authors.
  456. X * There is no warranty or other guarantee of fitness of this software
  457. X * for any purpose.  It is provided solely "as is".
  458. X * $Id: hf.h,v 4.0 91/07/17 14:38:19 kolb Exp Locker: kolb $
  459. X * $Log:    hf.h,v $
  460. X * Revision 4.0  91/07/17  14:38:19  kolb
  461. X * Initial version.
  462. X#ifndef HF_H
  463. X#define HF_H
  464. X#define GeomHfCreate(f) GeomCreate((GeomRef)HfCreate(f), HfMethods())
  465. X * Any height values <= Hf_UNSET is not considered to be part of the
  466. X * height field. Any trianges containing such a vertex will not be
  467. X * rendered.  This allows one to render non-square height fields.
  468. X#define HF_UNSET        (-1000.)
  469. X * Number of datapoints in a single cell.  If you've got loads of memory,
  470. X * decrease this number.  The 'optimal' number is quite system-dependent,
  471. X * but something around 20 seems to work well. For systems without much
  472. X * memory, this constant should be greater than or equal to the largest
  473. X * height field which will be rendered, thus making the algorithm
  474. X * non-hierarchical.
  475. X#define BESTSIZE        16
  476. X * Size of triangle cache.
  477. X#define CACHESIZE        6
  478. X * Used to differentiate between the two triangles used to represent a cell:
  479. X *    a------d
  480. X *      |\     |
  481. X *      | \TRI2|    TRI2 == c-->d-->a-->c
  482. X *      |  \   |
  483. X *      |   \  |
  484. X *    |    \ |
  485. X *      |TRI1 \|    TRI1 == c-->a-->b-->c
  486. X *      b------c
  487. X#define TRI1            1
  488. X#define TRI2            2
  489. Xtypedef struct hfTri {
  490. X    Vector v1, v2, v3, norm;
  491. X    Float d;
  492. X    char type;
  493. X    struct hfTri *next, *prev;
  494. X} hfTri;
  495. Xtypedef struct {
  496. X    int len;
  497. X    hfTri *head, *tail;
  498. X} TriQueue;
  499. Xtypedef struct {
  500. X    float **data;        /* Altitude points */
  501. X    float minz, maxz;
  502. X    int size, *lsize;    /* # of points/side */
  503. X    int BestSize;         /* "best" division size */
  504. X    float iBestSize;    /* inverse of above (for faster computation) */
  505. X    int levels;        /* log base BestSize of size */
  506. X    float ***boundsmax;    /* high data values at various resolutions. */
  507. X    float ***boundsmin;
  508. X    float *spacing;
  509. X    hfTri hittri, **q;    /* hit triangle and triangle cache */
  510. X    int qtail, qsize;    /* end and length of cache */
  511. X    Float boundbox[2][3];    /* bounding box of Hf */
  512. X} Hf;
  513. Xextern Hf    *HfCreate();
  514. Xextern int    HfIntersect(), HfEnter(), HfNormal();
  515. Xextern void    HfBounds(), HfUV(), HfStats();
  516. Xextern char    *HfName();
  517. Xextern Methods    *HfMethods();
  518. X#endif /* HF_H */
  519. END_OF_FILE
  520. if test 2626 -ne `wc -c <'libray/libobj/hf.h'`; then
  521.     echo shar: \"'libray/libobj/hf.h'\" unpacked with wrong size!
  522. # end of 'libray/libobj/hf.h'
  523. if test -f 'libray/libobj/list.c' -a "${1}" != "-c" ; then 
  524.   echo shar: Will not clobber existing file \"'libray/libobj/list.c'\"
  525. echo shar: Extracting \"'libray/libobj/list.c'\" \(3113 characters\)
  526. sed "s/^X//" >'libray/libobj/list.c' <<'END_OF_FILE'
  527. X * list.c
  528. X * Copyright (C) 1989, 1991, Craig E. Kolb
  529. X * All rights reserved.
  530. X * This software may be freely copied, modified, and redistributed
  531. X * provided that this copyright notice is preserved on all copies.
  532. X * You may not distribute this software, in whole or in part, as part of
  533. X * any commercial product without the express consent of the authors.
  534. X * There is no warranty or other guarantee of fitness of this software
  535. X * for any purpose.  It is provided solely "as is".
  536. X * $Id: list.c,v 4.0 91/07/17 14:38:42 kolb Exp Locker: kolb $
  537. X * $Log:    list.c,v $
  538. X * Revision 4.0  91/07/17  14:38:42  kolb
  539. X * Initial version.
  540. X#include "geom.h"
  541. X#include "list.h"
  542. Xstatic Methods *iListMethods = NULL;
  543. Xstatic char listName[] = "list";
  544. XList *
  545. XListCreate()
  546. X    return (List *)share_calloc(1, sizeof(List));
  547. Xchar *
  548. XListName()
  549. X    return listName;
  550. X * Take a list whose DATA field points to a linked list of objects and
  551. X * turn it into a List.
  552. XListConvert(list, objlist)
  553. XList *list;
  554. XGeom *objlist;
  555. X    int num;
  556. X     * Find the unbounded objects on the list as well as the
  557. X     * bounding box of the list.
  558. X     */
  559. X    list->list = objlist;
  560. X    for (num = 0; objlist; objlist = objlist->next)
  561. X        num += objlist->prims;
  562. X    return num;
  563. X * Intersect ray & list of objects.
  564. XListIntersect(list, ray, hitlist, mindist, maxdist)
  565. XList *list;
  566. XRay *ray;
  567. XHitList *hitlist;
  568. XFloat mindist, *maxdist;
  569. X    Geom *objlist;
  570. X    Vector vtmp;
  571. X    Float s;
  572. X    int hit;
  573. X    hit = FALSE;
  574. X     * Intersect with unbounded objects.
  575. X     */
  576. X    for (objlist = list->unbounded; objlist ; objlist = objlist->next) {
  577. X        if (intersect(objlist, ray, hitlist, mindist, maxdist))
  578. X            hit = TRUE;
  579. X     * Check for intersection with bounding box.
  580. X     */
  581. X    s = *maxdist;    /* So maxdist won't be reset. */
  582. X    VecAddScaled(ray->pos, mindist, ray->dir, &vtmp);
  583. X    if (OutOfBounds(&vtmp, list->bounds) &&
  584. X        !BoundsIntersect(ray, list->bounds, mindist, &s))
  585. X        /*
  586. X         * Ray never hit list.
  587. X         */
  588. X        return hit;
  589. X     * Else the ray enters list-space before it hits an
  590. X     * unbounded object. Intersect with objects on list.
  591. X     */
  592. X    for (objlist = list->list; objlist ; objlist = objlist->next) {
  593. X        if (intersect(objlist, ray, hitlist, mindist, maxdist))
  594. X            hit = TRUE;
  595. X    return hit;
  596. XMethods *
  597. XListMethods()
  598. X    if (iListMethods == (Methods *)NULL) {
  599. X        iListMethods = MethodsCreate();
  600. X        iListMethods->methods = ListMethods;
  601. X        iListMethods->create = (GeomCreateFunc *)ListCreate;
  602. X        iListMethods->name = ListName;
  603. X        iListMethods->intersect = ListIntersect;
  604. X        iListMethods->bounds = ListBounds;
  605. X        iListMethods->convert = ListConvert;
  606. X        iListMethods->checkbounds = FALSE;
  607. X        iListMethods->closed = TRUE;
  608. X    return iListMethods;
  609. Xvoid
  610. XListBounds(list, bounds)
  611. XList *list;
  612. XFloat bounds[2][3];
  613. X    Geom *obj, *next;
  614. X    BoundsInit(list->bounds);
  615. X     * For each object on the list,
  616. X     * compute its bounds...
  617. X     */
  618. X    list->unbounded  = GeomComputeAggregateBounds(&list->list, 
  619. X                list->unbounded, list->bounds);
  620. X    BoundsCopy(list->bounds, bounds);
  621. Xvoid
  622. XListMethodRegister(meth)
  623. XUserMethodType meth;
  624. X    if (iListMethods)
  625. X        iListMethods->user = meth;
  626. END_OF_FILE
  627. if test 3113 -ne `wc -c <'libray/libobj/list.c'`; then
  628.     echo shar: \"'libray/libobj/list.c'\" unpacked with wrong size!
  629. # end of 'libray/libobj/list.c'
  630. if test -f 'libray/libobj/plane.c' -a "${1}" != "-c" ; then 
  631.   echo shar: Will not clobber existing file \"'libray/libobj/plane.c'\"
  632. echo shar: Extracting \"'libray/libobj/plane.c'\" \(2991 characters\)
  633. sed "s/^X//" >'libray/libobj/plane.c' <<'END_OF_FILE'
  634. X * plane.c
  635. X * Copyright (C) 1989, 1991, Craig E. Kolb
  636. X * All rights reserved.
  637. X * This software may be freely copied, modified, and redistributed
  638. X * provided that this copyright notice is preserved on all copies.
  639. X * You may not distribute this software, in whole or in part, as part of
  640. X * any commercial product without the express consent of the authors.
  641. X * There is no warranty or other guarantee of fitness of this software
  642. X * for any purpose.  It is provided solely "as is".
  643. X * $Id: plane.c,v 4.0 91/07/17 14:38:51 kolb Exp Locker: kolb $
  644. X * $Log:    plane.c,v $
  645. X * Revision 4.0  91/07/17  14:38:51  kolb
  646. X * Initial version.
  647. X#include "geom.h"
  648. X#include "plane.h"
  649. Xstatic Methods *iPlaneMethods = NULL;
  650. Xstatic char planeName[] = "plane";
  651. Xunsigned long PlaneTests, PlaneHits;
  652. X * create plane primitive
  653. XPlane *
  654. XPlaneCreate(pos, norm)
  655. XVector *pos, *norm;
  656. X    Plane *plane;
  657. X    Vector tmpnrm;
  658. X    tmpnrm = *norm;
  659. X    if (VecNormalize(&tmpnrm) == 0.) {
  660. X        RLerror(RL_WARN, "Degenerate plane normal.\n");
  661. X        return (Plane *)NULL;
  662. X    plane = (Plane *)share_malloc(sizeof(Plane));
  663. X    plane->norm = tmpnrm;
  664. X    plane->pos = *pos;
  665. X    plane->d = dotp(&plane->norm, pos);
  666. X    return plane;
  667. XMethods *
  668. XPlaneMethods()
  669. X    if (iPlaneMethods == (Methods *)NULL) {
  670. X        iPlaneMethods = MethodsCreate();
  671. X        iPlaneMethods->name = PlaneName;
  672. X        iPlaneMethods->create = (GeomCreateFunc *)PlaneCreate;
  673. X        iPlaneMethods->methods = PlaneMethods;
  674. X        iPlaneMethods->intersect = PlaneIntersect;
  675. X        iPlaneMethods->normal = PlaneNormal;
  676. X        iPlaneMethods->uv = PlaneUV;
  677. X        iPlaneMethods->bounds = PlaneBounds;
  678. X        iPlaneMethods->stats = PlaneStats;
  679. X        iPlaneMethods->checkbounds = FALSE;
  680. X        iPlaneMethods->closed = FALSE;
  681. X    return iPlaneMethods;
  682. XPlaneIntersect(plane, ray, mindist, maxdist)
  683. XPlane *plane;
  684. XRay *ray;
  685. XFloat mindist, *maxdist;
  686. X    Float d;
  687. X    PlaneTests++;
  688. X    d = dotp(&plane->norm, &ray->dir);
  689. X    if (fabs(d) < EPSILON)
  690. X        return FALSE;
  691. X    d = (plane->d - dotp(&plane->norm, &ray->pos)) / d;
  692. X    if (d > mindist && d < *maxdist) {
  693. X        *maxdist = d;
  694. X        PlaneHits++;
  695. X        return TRUE;
  696. X    return FALSE;
  697. X/*ARGSUSED*/
  698. XPlaneNormal(plane, pos, nrm, gnrm)
  699. XPlane *plane;
  700. XVector *pos, *nrm, *gnrm;
  701. X    *gnrm = *nrm = plane->norm;
  702. X    return FALSE;
  703. Xvoid
  704. XPlaneUV(plane, pos, norm, uv, dpdu, dpdv)
  705. XPlane *plane;
  706. XVector *pos, *norm, *dpdu, *dpdv;
  707. XVec2d *uv;
  708. X    Vector vec, du, dv;
  709. X    VecCoordSys(norm, &du, &dv);
  710. X    VecSub(*pos, plane->pos, &vec);
  711. X    uv->u = dotp(&vec, &du);
  712. X    uv->v = dotp(&vec, &dv);
  713. X    if (dpdu)
  714. X        *dpdu = du;
  715. X    if (dpdv)
  716. X        *dpdv = dv;
  717. X/*ARGSUSED*/
  718. Xvoid
  719. XPlaneBounds(plane, bounds)
  720. XPlane *plane;
  721. XFloat bounds[2][3];
  722. X     * Planes are unbounded by nature.  minx > maxx signifies
  723. X     * this.
  724. X     */
  725. X    bounds[LOW][X] = 1.0;
  726. X    bounds[HIGH][X] = -1.0;
  727. Xchar *
  728. XPlaneName()
  729. X    return planeName;
  730. Xvoid
  731. XPlaneStats(tests, hits)
  732. Xunsigned long *tests, *hits;
  733. X    *tests = PlaneTests;
  734. X    *hits = PlaneHits;
  735. Xvoid
  736. XPlaneMethodRegister(meth)
  737. XUserMethodType meth;
  738. X    if (iPlaneMethods)
  739. X        iPlaneMethods->user = meth;
  740. END_OF_FILE
  741. if test 2991 -ne `wc -c <'libray/libobj/plane.c'`; then
  742.     echo shar: \"'libray/libobj/plane.c'\" unpacked with wrong size!
  743. # end of 'libray/libobj/plane.c'
  744. if test -f 'libray/libsurf/fogdeck.c' -a "${1}" != "-c" ; then 
  745.   echo shar: Will not clobber existing file \"'libray/libsurf/fogdeck.c'\"
  746. echo shar: Extracting \"'libray/libsurf/fogdeck.c'\" \(2785 characters\)
  747. sed "s/^X//" >'libray/libsurf/fogdeck.c' <<'END_OF_FILE'
  748. X * fogdeck.c
  749. X * Copyright (C) 1989, 1991, Craig E. Kolb
  750. X * All rights reserved.
  751. X * This software may be freely copied, modified, and redistributed
  752. X * provided that this copyright notice is preserved on all copies.
  753. X * You may not distribute this software, in whole or in part, as part of
  754. X * any commercial product without the express consent of the authors.
  755. X * There is no warranty or other guarantee of fitness of this software
  756. X * for any purpose.  It is provided solely "as is".
  757. X * $Id: fogdeck.c,v 4.0 91/07/17 14:40:28 kolb Exp Locker: kolb $
  758. X * $Log:    fogdeck.c,v $
  759. X * Revision 4.0  91/07/17  14:40:28  kolb
  760. X * Initial version.
  761. X#include "atmosphere.h"
  762. X#include "fogdeck.h"
  763. XFogdeck *
  764. XFogdeckCreate(alt, offset, scale, chaoscale, octaves, color, trans)
  765. XFloat alt, offset, chaoscale;
  766. XVector *scale;
  767. Xint octaves;
  768. XColor *color, *trans;
  769. X    Fogdeck *fogdeck;
  770. X    static void ComputeFogdeck();
  771. X    fogdeck = (Fogdeck *)Malloc(sizeof(Fogdeck));
  772. X    fogdeck->alt = alt;
  773. X    fogdeck->octaves = octaves;
  774. X    fogdeck->scale = *scale;
  775. X    fogdeck->chaoscale = chaoscale;
  776. X    fogdeck->offset = offset;
  777. X    if (color == (Color *)NULL)
  778. X        fogdeck->color.r = fogdeck->color.g = fogdeck->color.b = 0.;
  779. X    else
  780. X        fogdeck->color = *color;
  781. X    if (trans == (Color *)NULL)
  782. X        fogdeck->trans.r = fogdeck->trans.g = fogdeck->trans.b =
  783. X            FAR_AWAY;
  784. X    else {
  785. X        fogdeck->trans = *trans;
  786. X    return fogdeck;
  787. X * Add fogdeck to the given color.
  788. Xvoid
  789. XFogdeckApply(fogdeck, ray, pos, dist, color)
  790. XFogdeck *fogdeck;
  791. XRay *ray;
  792. XVector *pos;
  793. XFloat dist;
  794. XColor *color;
  795. X    Float atten, hitdist, density;
  796. X    Color trans;
  797. X    Vector endp;
  798. X    extern Float ExpAtten(), PAChaos();
  799. X     * Find distance from origin at which ray strikes
  800. X     * z = fogdeck->alt plane
  801. X     */
  802. X    if (abs(ray->dir.z) < EPSILON)
  803. X        return;
  804. X    hitdist = (fogdeck->alt - ray->pos.z) / ray->dir.z;
  805. X    if (hitdist < EPSILON || hitdist > dist)
  806. X        return;
  807. X     * Compute ray endpoint
  808. X     */
  809. X    VecAddScaled(ray->pos, hitdist, ray->dir, &endp);
  810. X     * Modify transmissivity based on point of
  811. X     * intersection.
  812. X     */
  813. X    endp.x *= fogdeck->scale.x;
  814. X    endp.y *= fogdeck->scale.y;
  815. X    endp.z *= fogdeck->scale.z;
  816. X    density = fogdeck->offset +
  817. X            fogdeck->chaoscale * PAChaos(&endp, fogdeck->octaves);
  818. X    if (density < EPSILON)
  819. X        density = HUGE;
  820. X    else
  821. X        density = 1. / density;
  822. X    trans = fogdeck->trans;
  823. X    ColorScale(density, trans, &trans);
  824. X    dist -= hitdist;
  825. X    atten = ExpAtten(dist, trans.r);
  826. X    if (trans.r == trans.g &&
  827. X        trans.r == trans.b) {
  828. X        ColorBlend(color, &fogdeck->color, atten, 1. - atten);
  829. X        return;
  830. X    color->r = atten*color->r + (1. - atten) * fogdeck->color.r;
  831. X    atten = ExpAtten(dist, trans.g);
  832. X    color->g = atten*color->g + (1. - atten) * fogdeck->color.g;
  833. X    atten = ExpAtten(dist, trans.b);
  834. X    color->b = atten*color->b + (1. - atten) * fogdeck->color.b;
  835. END_OF_FILE
  836. if test 2785 -ne `wc -c <'libray/libsurf/fogdeck.c'`; then
  837.     echo shar: \"'libray/libsurf/fogdeck.c'\" unpacked with wrong size!
  838. # end of 'libray/libsurf/fogdeck.c'
  839. if test -f 'libray/libtext/cloud.c' -a "${1}" != "-c" ; then 
  840.   echo shar: Will not clobber existing file \"'libray/libtext/cloud.c'\"
  841. echo shar: Extracting \"'libray/libtext/cloud.c'\" \(2607 characters\)
  842. sed "s/^X//" >'libray/libtext/cloud.c' <<'END_OF_FILE'
  843. X * cloud.c
  844. X * Copyright (C) 1989, 1991, Craig E. Kolb
  845. X * All rights reserved.
  846. X * This software may be freely copied, modified, and redistributed
  847. X * provided that this copyright notice is preserved on all copies.
  848. X * You may not distribute this software, in whole or in part, as part of
  849. X * any commercial product without the express consent of the authors.
  850. X * There is no warranty or other guarantee of fitness of this software
  851. X * for any purpose.  It is provided solely "as is".
  852. X * $Id: cloud.c,v 4.0 91/07/17 14:41:57 kolb Exp Locker: kolb $
  853. X * $Log:    cloud.c,v $
  854. X * Revision 4.0  91/07/17  14:41:57  kolb
  855. X * Initial version.
  856. X#include "texture.h"
  857. X#include "cloud.h"
  858. X * Gardner-style textured ellipsoid.  Designed to be used on unit spheres
  859. X * centered at the origin.  (Of course, the spheres may be transformed
  860. X * into ellipsoids, translated, etc.)
  861. XCloudText *
  862. XCloudTextCreate(scale, h, lambda, octaves, cthresh, lthresh, transcale)
  863. XFloat scale, h, lambda, cthresh, lthresh, transcale;
  864. Xint octaves;
  865. X    CloudText *cloud;
  866. X    cloud = (CloudText *)Malloc(sizeof(CloudText));
  867. X    cloud->beta = 1. + 2 * h;
  868. X    cloud->omega = pow(lambda, -0.5 * cloud->beta);
  869. X    cloud->lambda = lambda;
  870. X    cloud->scale = scale;
  871. X    cloud->cthresh = cthresh;
  872. X    cloud->range = lthresh - cthresh;
  873. X    cloud->transcale = transcale;
  874. X    cloud->maxval = 1. / (1. - cloud->beta);
  875. X    cloud->octaves = octaves;
  876. X    return cloud;
  877. Xvoid
  878. XCloudTextApply(cloud, prim, ray, pos, norm, gnorm, surf)
  879. XCloudText *cloud;
  880. XGeom *prim;
  881. XRay *ray;
  882. XVector *pos, *norm, *gnorm;
  883. XSurface *surf;
  884. X    Ray pray;
  885. X    Float alpha, beta, It, dsquared, d, limb;
  886. X     * Transform ray to prim. space.
  887. X     */
  888. X    pray = *ray;
  889. X    (void)TextRayToPrim(&pray);
  890. X    dsquared = dotp(&pray.pos, &pray.pos);
  891. X    if (fabs(dsquared) < 1. + EPSILON) {
  892. X        surf->transp = 1.;
  893. X        surf->amb.r = surf->amb.g = surf->amb.b = 0.;
  894. X        surf->diff.r = surf->diff.g = surf->diff.b = 0.;
  895. X        return;
  896. X    It = fBm(pos,cloud->omega,cloud->lambda,cloud->octaves);
  897. X    It = (cloud->maxval + It) * 0.5/cloud->maxval;
  898. X    if (It < 0.)
  899. X        It = 0;
  900. X    else if (It > 1.)
  901. X        It = 1;
  902. X    d = sqrt(dsquared);
  903. X    beta = sqrt(dsquared - 1) / d;
  904. X    alpha = -dotp(&pray.pos, &pray.dir) / d;
  905. X    limb = (alpha - beta) / (1 - beta);
  906. X     * limb is 0 on the limb, 1 at the center, < 1 outside.
  907. X     */
  908. X    surf->transp = 1. - (It-cloud->cthresh-cloud->range*(1.-limb))/
  909. X            cloud->transcale;
  910. X    if (surf->transp > 1)
  911. X        surf->transp = 1.;
  912. X    if (surf->transp < 0)
  913. X        surf->transp = 0.;
  914. X    ColorScale((1. - surf->transp) *
  915. X           (1. - cloud->scale + cloud->scale*It),
  916. X            surf->diff, &surf->diff);
  917. X    ColorScale(1. - surf->transp, surf->amb, &surf->amb);
  918. END_OF_FILE
  919. if test 2607 -ne `wc -c <'libray/libtext/cloud.c'`; then
  920.     echo shar: \"'libray/libtext/cloud.c'\" unpacked with wrong size!
  921. # end of 'libray/libtext/cloud.c'
  922. if test -f 'libray/libtext/stripe.c' -a "${1}" != "-c" ; then 
  923.   echo shar: Will not clobber existing file \"'libray/libtext/stripe.c'\"
  924. echo shar: Extracting \"'libray/libtext/stripe.c'\" \(2911 characters\)
  925. sed "s/^X//" >'libray/libtext/stripe.c' <<'END_OF_FILE'
  926. X * stripe.c
  927. X * Copyright (C) 1989, 1991, Craig E. Kolb
  928. X * All rights reserved.
  929. X * This software may be freely copied, modified, and redistributed
  930. X * provided that this copyright notice is preserved on all copies.
  931. X * You may not distribute this software, in whole or in part, as part of
  932. X * any commercial product without the express consent of the authors.
  933. X * There is no warranty or other guarantee of fitness of this software
  934. X * for any purpose.  It is provided solely "as is".
  935. X * $Id: stripe.c,v 4.0 91/07/17 14:43:52 kolb Exp Locker: kolb $
  936. X * $Log:    stripe.c,v $
  937. X * Revision 4.0  91/07/17  14:43:52  kolb
  938. X * Initial version.
  939. X#include "texture.h"
  940. X#include "stripe.h"
  941. XStripe *
  942. XStripeCreate(surf, width, bump, mapping)
  943. XSurface *surf;
  944. XFloat width, bump;
  945. XMapping *mapping;
  946. X    Stripe *stripe;
  947. X    stripe = (Stripe *)Malloc(sizeof(Stripe));
  948. X    stripe->surf = surf;
  949. X    stripe->mapping = mapping;
  950. X    stripe->width = width;
  951. X    stripe->bump = bump;
  952. X    return stripe;
  953. Xvoid
  954. XStripeApply(stripe, prim, ray, pos, norm, gnorm, surf)
  955. XStripe *stripe;
  956. XGeom *prim;
  957. XVector *ray, *pos, *norm, *gnorm;
  958. XSurface *surf;
  959. X    Vector dpdu, dpdv;
  960. X    Float fu, fv, u, v;
  961. X    TextToUV(stripe->mapping, prim, pos, gnorm, &u, &v, &dpdu, &dpdv);
  962. X    u -= floor(u);
  963. X    v -= floor(v);
  964. X     *    s s          s
  965. X     *   | | |        | |
  966. X     * 1 +-+------------+
  967. X     *   |X|\^^^^^^^^^^/| } s
  968. X     *   |X|<+--------+>|
  969. X     *   |X|<|        |>|
  970. X     *   |X|<|        |>|
  971. X     *   |X|<|        |>|
  972. X     * v |X|<|        |>|
  973. X     *   |X|<|        |>|
  974. X     *   |X|<|        |>|
  975. X     *   |X|<+--------+>|
  976. X     *   |X|/vvvvvvvvvv\| } s
  977. X     *   |X+------------+
  978. X     *   |XXXXXXXXXXXXXX| } s
  979. X     * 0 +--------------+
  980. X     *   0              1
  981. X     *        u
  982. X     * where ^ == positive fv, 0 fu, original surf.
  983. X     *     v == negative fv, 0 fu, original surf.
  984. X     *     > == positive fu, 0 fv, original surf.
  985. X     *     < == negative fu, 0 fv, original surf.
  986. X     *   blank == 0 fu, 0 fv, original surf.
  987. X     *       X == 0 fu, 0 fv, alternate surf.
  988. X     * for stripe->bump > 0.  For stripe->bump < 0., change signs.
  989. X     */
  990. X    if (u > 2*stripe->width && v > 2*stripe->width &&
  991. X        u <= 1. - stripe->width && v <= 1. - stripe->width)
  992. X        /* flat surface */
  993. X        return;
  994. X    else if (u < stripe->width || v < stripe->width) {
  995. X        /* on the bottom of the bump. */
  996. X        *surf = *stripe->surf;
  997. X        return;
  998. X     * Lower u & v edges are the 'flat' part of the bump --
  999. X     * make our lives simpler below by 'removing' this area
  1000. X     * from u & v.
  1001. X     */
  1002. X    u = (u - stripe->width) / (1. - stripe->width);
  1003. X    v = (v - stripe->width) / (1. - stripe->width);
  1004. X     * Now the hard part -- where's the bump?
  1005. X     */
  1006. X    if (v < u) { 
  1007. X        if (v < 1. - u) {
  1008. X            /* bottom */
  1009. X            fu = 0.;
  1010. X            fv = -stripe->bump;
  1011. X        } else {
  1012. X            /* right */
  1013. X            fu = stripe->bump;
  1014. X            fv = 0.;
  1015. X    } else {
  1016. X        if (v < 1. - u) {
  1017. X            /* left */
  1018. X            fu = -stripe->bump;
  1019. X            fv = 0.;
  1020. X        } else {
  1021. X            /* top */
  1022. X            fu = 0.;
  1023. X            fv = stripe->bump;
  1024. X    MakeBump(norm, &dpdu, &dpdv, fu, fv);
  1025. END_OF_FILE
  1026. if test 2911 -ne `wc -c <'libray/libtext/stripe.c'`; then
  1027.     echo shar: \"'libray/libtext/stripe.c'\" unpacked with wrong size!
  1028. # end of 'libray/libtext/stripe.c'
  1029. if test -f 'libshade/Makefile.SH' -a "${1}" != "-c" ; then 
  1030.   echo shar: Will not clobber existing file \"'libshade/Makefile.SH'\"
  1031. echo shar: Extracting \"'libshade/Makefile.SH'\" \(2825 characters\)
  1032. sed "s/^X//" >'libshade/Makefile.SH' <<'END_OF_FILE'
  1033. Xcase $CONFIG in
  1034. X    if test ! -f config.sh; then
  1035. X    ln ../config.sh . || \
  1036. X    ln ../../config.sh . || \
  1037. X    ln ../../../config.sh . || \
  1038. X    (echo "Can't find config.sh."; exit 1)
  1039. X    fi
  1040. X    . config.sh
  1041. X    ;;
  1042. Xesac
  1043. X: This forces SH files to create target in same directory as SH file.
  1044. X: This is so that make depend always knows where to find SH derivatives.
  1045. Xcase "$0" in
  1046. X*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
  1047. Xesac
  1048. Xecho "Extracting Makefile (with variable substitutions)"
  1049. X: This section of the file will have variable substitutions done on it.
  1050. X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
  1051. X: Protect any dollar signs and backticks that you do not want interpreted
  1052. X: by putting a backslash in front.  You may delete these comments.
  1053. X$spitshell >Makefile <<!GROK!THIS!
  1054. X# Makefile for rayshade.
  1055. X# Craig Kolb
  1056. X# \$Id: Makefile.SH,v 4.0 91/07/17 14:44:47 kolb Exp Locker: kolb $
  1057. X# Bin directory
  1058. XBINDIR = $bin 
  1059. X# If you are using LINDA, add -DLINDA
  1060. X# If you are running on a Multimax, add -DMULTIMAX -DSHAREDMEM
  1061. X# Be sure to add any necessary floating point hardware switches.
  1062. XOPTIMIZE = $optimize
  1063. XURTINC = $urtinc
  1064. XCCFLAGS = $ccflags $large
  1065. XCC = $cc
  1066. XMKDEP = $mkdep
  1067. XYACC = $yacc
  1068. XRANLIB = $ranlib
  1069. X!GROK!THIS!
  1070. X: In the following dollars and backticks do not need the extra backslash.
  1071. X$spitshell >>Makefile <<'!NO!SUBS!'
  1072. XLIBRAYDIR = ../libray
  1073. XINCLUDE = -I.. -I$(LIBRAYDIR)
  1074. XYFLAGS = -d
  1075. XCFLAGS = $(CCFLAGS) $(URTINC) $(INCLUDE) $(OPTIMIZE)
  1076. XSHELL = /bin/sh
  1077. XLIB = libshade.a
  1078. XSUPPORT_C =    builtin.c symtab.c misc.c lightdef.c objdef.c options.c \
  1079. X        stats.c surfdef.c
  1080. XSUPPORT_H =    ../config.h datatypes.h funcdefs.h \
  1081. X        ../patchlevel.h rayshade.h
  1082. XPARSE_C =    yacc.c lex.c
  1083. XDRIVE_C =    setup.c viewing.c shade.c picture.c
  1084. XDRIVE_H =    y.tab.h defaults.h viewing.h raytrace.h picture.h
  1085. XSUPPORT_O = $(SUPPORT_C:.c=.o)
  1086. XPARSE_O = $(PARSE_C:.c=.o)
  1087. XDRIVE_O = $(DRIVE_C:.c=.o)
  1088. XHFILES = $(DRIVE_H) $(SUPPORT_H)
  1089. XCFILES = $(DRIVE_C) $(PARSE_C) $(SUPPORT_C)
  1090. XSHFILES = Makefile.SH
  1091. XOFILES = $(DRIVE_O) $(PARSE_O) $(SUPPORT_O)
  1092. XDEPENDSRC = $(DRIVE_C) lex.l yacc.y $(SUPPORT_C)
  1093. X$(LIB): $(OFILES)
  1094. X    ar cur $(LIB) $(OFILES)
  1095. X    $(RANLIB) $(LIB)
  1096. X# Uncomment the following rule if using Linda.
  1097. X#raytrace.lo: raytrace.cl
  1098. X#    $(LCC) $(CFLAGS) -c raytrace.cl
  1099. X# End of configuration section
  1100. Xinstall:    rayshade
  1101. X        mv rayshade $(BINDIR)/rayshade
  1102. Xclean:
  1103. X    rm -f $(OFILES) core libshade.a
  1104. Xrealclean:
  1105. X    rm -f $(OFILES) core libshade.a y.tab.h
  1106. X    rm -f *.orig Makefile
  1107. Xlint:
  1108. X    lint $(CFLAGS) -x $(CFILES) -lm
  1109. Xtags:
  1110. X    ctags -t $(CFILES)
  1111. Xdepend:
  1112. X    (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \
  1113. X     $(MKDEP) $(DEPENDSRC) | sed 's/: \.\//: /; /\/usr\/include/d' \
  1114. X    ) >Makefile.new
  1115. X    cp Makefile Makefile.bak
  1116. X    cp Makefile.new Makefile
  1117. X    rm -f Makefile.new
  1118. X# DO NOT DELETE THIS LINE
  1119. X!NO!SUBS!
  1120. Xchmod 755 Makefile
  1121. X$eunicefix Makefile
  1122. END_OF_FILE
  1123. if test 2825 -ne `wc -c <'libshade/Makefile.SH'`; then
  1124.     echo shar: \"'libshade/Makefile.SH'\" unpacked with wrong size!
  1125. chmod +x 'libshade/Makefile.SH'
  1126. # end of 'libshade/Makefile.SH'
  1127. if test -f 'libshade/surfdef.c' -a "${1}" != "-c" ; then 
  1128.   echo shar: Will not clobber existing file \"'libshade/surfdef.c'\"
  1129. echo shar: Extracting \"'libshade/surfdef.c'\" \(2988 characters\)
  1130. sed "s/^X//" >'libshade/surfdef.c' <<'END_OF_FILE'
  1131. X * surfdef.c
  1132. X * Copyright (C) 1989, 1991, Craig E. Kolb
  1133. X * All rights reserved.
  1134. X * This software may be freely copied, modified, and redistributed
  1135. X * provided that this copyright notice is preserved on all copies.
  1136. X * You may not distribute this software, in whole or in part, as part of
  1137. X * any commercial product without the express consent of the authors.
  1138. X * There is no warranty or other guarantee of fitness of this software
  1139. X * for any purpose.  It is provided solely "as is".
  1140. X * $Id: surfdef.c,v 4.0 91/07/17 14:47:53 kolb Exp Locker: kolb $
  1141. X * $Log:    surfdef.c,v $
  1142. X * Revision 4.0  91/07/17  14:47:53  kolb
  1143. X * Initial version.
  1144. X#include "rayshade.h"
  1145. X#include "libsurf/surface.h"
  1146. Xstatic Surface *Surfaces;    /* Named surfaces */
  1147. XSurface DefaultSurface = {
  1148. X        "DeFault",        /* name */
  1149. X        {0.1, 0.1, 0.1},    /* ambient */
  1150. X        {0.6, 0.6, 0.6},    /* diffuse */
  1151. X        {0.5, 0.5, 0.5},    /* specular */
  1152. X        {0.0, 0.0, 0.0},    /* Diffuse transmission 'curve' */
  1153. X        {1.0, 1.0, 1.0},    /* Specular transmission 'curve' */
  1154. X        12.,            /* reflected Phong coef */
  1155. X        12.,            /* transmitted Phong coef */
  1156. X        1.,            /* spec. transmitted attenuation */
  1157. X        DEFAULT_INDEX,        /* index of refr */
  1158. X        0.,            /* reflectivity */
  1159. X        0.,            /* transparency */
  1160. X        0.,            /* translucency */
  1161. X        FALSE,            /* noshadow */
  1162. X        NULL,            /* next */
  1163. XSurface *SurfaceGetNamed(), *SurfaceFetchNamed();
  1164. X * Add surf to the list of defined surfaces.
  1165. Xvoid
  1166. XSurfaceAddToDefined(surf)
  1167. XSurface *surf;
  1168. X     * Make sure index of refraction isn't bogus.
  1169. X     */
  1170. X    if (surf->transp > EPSILON && surf->index <= 0.)
  1171. X        RLerror(RL_PANIC,
  1172. X            "Index of refraction must be positive.\n");
  1173. X    if (surf->name == (char *)NULL || *surf->name == (char)NULL)
  1174. X        RLerror(RL_PANIC, "Surface with NULL name defined.\n");
  1175. X    if (SurfaceFetchNamed(surf->name) != (Surface *)NULL)
  1176. X        RLerror(RL_WARN,
  1177. X            "Redefinition of \"%s\" surface.", surf->name);
  1178. X    surf->next = Surfaces;
  1179. X    Surfaces = surf;
  1180. X * Search for surface with given name.  If not found, complain and exit.
  1181. XSurface *
  1182. XSurfaceGetNamed(name)
  1183. Xchar *name;
  1184. X    Surface *stmp;
  1185. X    stmp = SurfaceFetchNamed(name);
  1186. X    if (stmp == (Surface *)NULL)
  1187. X        RLerror(RL_PANIC, "Undefined surface \"%s\".", name);
  1188. X    return stmp;
  1189. X * Return pointer to surface with given name, NULL if no such surface.
  1190. XSurface *
  1191. XSurfaceFetchNamed(name)
  1192. Xchar *name;
  1193. X    Surface *stmp;
  1194. X    for (stmp = Surfaces; stmp ; stmp = stmp->next)
  1195. X        if(strcmp(name, stmp->name) == 0)
  1196. X            return stmp;
  1197. X     * No surface named "name".
  1198. X     */
  1199. X    return (Surface *)NULL;
  1200. X * Traverse the given hitlist to find the "bottom-most" surface.
  1201. X * If no surface is found, use the default.
  1202. XSurface *
  1203. XGetShadingSurf(hitlist)
  1204. XHitList *hitlist;
  1205. X    int i;
  1206. X     * -1 here because the World always has a NULL surface
  1207. X     * (DefaultSurf is used instead)
  1208. X     */
  1209. X    for (i = 0; i < hitlist->nodes -1; i++) {
  1210. X        if (hitlist->data[i].obj->surf)
  1211. X            return hitlist->data[i].obj->surf;
  1212. X     * No suface found -- use the default.
  1213. X     */
  1214. X    return &DefaultSurface;
  1215. END_OF_FILE
  1216. if test 2988 -ne `wc -c <'libshade/surfdef.c'`; then
  1217.     echo shar: \"'libshade/surfdef.c'\" unpacked with wrong size!
  1218. # end of 'libshade/surfdef.c'
  1219. if test -f 'raypaint/Makefile.SH' -a "${1}" != "-c" ; then 
  1220.   echo shar: Will not clobber existing file \"'raypaint/Makefile.SH'\"
  1221. echo shar: Extracting \"'raypaint/Makefile.SH'\" \(2800 characters\)
  1222. sed "s/^X//" >'raypaint/Makefile.SH' <<'END_OF_FILE'
  1223. Xcase $CONFIG in
  1224. X    if test ! -f config.sh; then
  1225. X    ln ../config.sh . || \
  1226. X    ln ../../config.sh . || \
  1227. X    ln ../../../config.sh . || \
  1228. X    (echo "Can't find config.sh."; exit 1)
  1229. X    fi
  1230. X    . config.sh
  1231. X    ;;
  1232. Xesac
  1233. X: This forces SH files to create target in same directory as SH file.
  1234. X: This is so that make depend always knows where to find SH derivatives.
  1235. Xcase "$0" in
  1236. X*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
  1237. Xesac
  1238. Xecho "Extracting Makefile (with variable substitutions)"
  1239. X: This section of the file will have variable substitutions done on it.
  1240. X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
  1241. X: Protect any dollar signs and backticks that you do not want interpreted
  1242. X: by putting a backslash in front.  You may delete these comments.
  1243. X$spitshell >Makefile <<!GROK!THIS!
  1244. X# Makefile for raypaint
  1245. X# Craig Kolb
  1246. X# \$Id: Makefile.SH,v 4.0 91/07/17 14:48:38 kolb Exp Locker: kolb $
  1247. X# Bin directory
  1248. XBINDIR = $bin 
  1249. X# If you are using LINDA, add -DLINDA
  1250. X# If you are running on a Multimax, add -DMULTIMAX -DSHAREDMEM
  1251. X# Be sure to add any necessary floating point hardware switches.
  1252. XOPTIMIZE = $optimize
  1253. XURTINC = $urtinc
  1254. XCCFLAGS = $ccflags $large
  1255. XURTLIB = $urtlib
  1256. XLDFLAGS = $libs $ldflags
  1257. XCC = $cc
  1258. XMKDEP = $mkdep
  1259. XYACC = $yacc
  1260. X!GROK!THIS!
  1261. X: In the following dollars and backticks do not need the extra backslash.
  1262. X$spitshell >>Makefile <<'!NO!SUBS!'
  1263. XLIBRAYDIR = ../libray
  1264. XLIBSHADEDIR = ../libshade
  1265. XINCLUDE = -I$(LIBRAYDIR) -I$(LIBSHADEDIR) -I..
  1266. XYFLAGS = -d
  1267. X# If using X11, use:
  1268. X#GRAPHICSLIB = -lX11
  1269. X# If you are using GL, use:
  1270. XGRAPHICSLIB = -lgl_s
  1271. XLIBRAY = $(LIBRAYDIR)/libray.a
  1272. XLIBSHADE = $(LIBSHADEDIR)/libshade.a
  1273. XCFLAGS = $(CCFLAGS) $(URTINC) $(INCLUDE) $(OPTIMIZE) -DSHARED_EDGES
  1274. XSHELL = /bin/sh
  1275. X# If you are using a Multimax, add -lpp
  1276. X# If you have a fast malloc library, use it (e.g., -lmalloc on MIPS machines)
  1277. XLIBS = $(LIBSHADE) $(LIBRAY) $(URTLIB)
  1278. XDRIVE_C =    main.c graphics.c render.c version.c
  1279. XDRIVE_O = $(DRIVE_C:.c=.o)
  1280. XCFILES = $(DRIVE_C)
  1281. XSHFILES = Makefile.SH
  1282. XOBJ = $(DRIVE_O)
  1283. XDEPENDSRC = $(DRIVE_C)
  1284. Xraypaint: $(OBJ) $(LIBS)
  1285. X    $(CC) $(OPTIMIZE) -o raypaint $(OBJ) $(LIBS) $(LDFLAGS) $(GRAPHICSLIB)
  1286. X# Uncomment the following rule if using Linda.
  1287. X#raytrace.lo: raytrace.cl
  1288. X#    $(LCC) $(CFLAGS) -c raytrace.cl
  1289. X# End of configuration section
  1290. Xinstall:    raypaint
  1291. X        mv raypaint $(BINDIR)/raypaint
  1292. Xclean:
  1293. X    rm -f $(OBJ) core
  1294. Xrealclean:
  1295. X    rm -f $(OBJ) core y.tab.h
  1296. X    rm -f *.orig Makefile
  1297. Xlint:
  1298. X    lint $(CFLAGS) -x $(CFILES) -lm
  1299. Xtags:
  1300. X    ctags -t $(CFILES)
  1301. Xdepend:
  1302. X    (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \
  1303. X     $(MKDEP) $(DEPENDSRC) | sed 's/: \.\//: /; /\/usr\/include/d' \
  1304. X    ) >Makefile.new
  1305. X    cp Makefile Makefile.bak
  1306. X    cp Makefile.new Makefile
  1307. X    rm -f Makefile.new
  1308. X# DO NOT DELETE THIS LINE
  1309. X!NO!SUBS!
  1310. Xchmod 755 Makefile
  1311. X$eunicefix Makefile
  1312. END_OF_FILE
  1313. if test 2800 -ne `wc -c <'raypaint/Makefile.SH'`; then
  1314.     echo shar: \"'raypaint/Makefile.SH'\" unpacked with wrong size!
  1315. chmod +x 'raypaint/Makefile.SH'
  1316. # end of 'raypaint/Makefile.SH'
  1317. if test -f 'raypaint/glgraphics.c' -a "${1}" != "-c" ; then 
  1318.   echo shar: Will not clobber existing file \"'raypaint/glgraphics.c'\"
  1319. echo shar: Extracting \"'raypaint/glgraphics.c'\" \(2838 characters\)
  1320. sed "s/^X//" >'raypaint/glgraphics.c' <<'END_OF_FILE'
  1321. X * glgraphics.c
  1322. X * Copyright (C) 1989, 1991 Craig E. Kolb
  1323. X * All rights reserved.
  1324. X * This software may be freely copied, modified, and redistributed
  1325. X * provided that this copyright notice is preserved on all copies.
  1326. X * You may not distribute this software, in whole or in part, as part of
  1327. X * any commercial product without the express consent of the authors.
  1328. X * There is no warranty or other guarantee of fitness of this software
  1329. X * for any purpose.  It is provided solely "as is".
  1330. X * $Id: glgraphics.c,v 4.0 91/07/17 17:36:39 kolb Exp Locker: kolb $
  1331. X * $Log:    glgraphics.c,v $
  1332. X * Revision 4.0  91/07/17  17:36:39  kolb
  1333. X * Initial version.
  1334. X#include <gl.h>
  1335. X#include <device.h>
  1336. X#define CPACK(x)    cpack(((((x)[2] << 8) | (x)[1]) << 8) | x[0])
  1337. XGraphicsInit(xsize, ysize, name)
  1338. Xint xsize, ysize;
  1339. Xchar *name;
  1340. X#ifndef _IBMR2
  1341. X    foreground();
  1342. X#endif
  1343. X    prefsize(xsize, ysize);
  1344. X    winopen(name);
  1345. X    ortho2(-0.5, (float)xsize -0.5, -0.5, (float)ysize - 0.5);
  1346. X    viewport(0, xsize -1, 0, ysize -1);
  1347. X    color(BLACK);
  1348. X    clear();
  1349. X    RGBmode();
  1350. X    gconfig();
  1351. X    unqdevice(INPUTCHANGE);
  1352. X    qdevice(LEFTMOUSE);  /* Pop a square on request */
  1353. X    qdevice(MIDDLEMOUSE);
  1354. X    qdevice(RIGHTMOUSE);
  1355. X    qdevice(REDRAW);
  1356. X * Draw the pixel at (xp, yp) in the color given by the rgb-triple,
  1357. X * 0 indicating 0 intensity, 255 max intensity.
  1358. XGraphicsDrawPixel(xp, yp, color)
  1359. Xint xp, yp;
  1360. Xunsigned char color[3];
  1361. X    unsigned long int pix;
  1362. X    pix = (((color[2] << 8) | color[1]) << 8) | color[0];
  1363. X    lrectwrite(xp, yp, xp, yp, &pix);
  1364. X * Draw the rectangle with lower left corner (xp, yp) and upper right
  1365. X * corner (xp+ys, yp+ys).  The colors of the l-l, l-r, u-r, and u-l
  1366. X * corners are given as arrays of unsigned chars as above.
  1367. XGraphicsDrawRectangle(xp, yp, xs, ys, ll, lr, ur, ul)
  1368. Xint xp, yp, xs, ys;
  1369. Xunsigned char ll[3], lr[3], ur[3], ul[3];
  1370. X    int   p[2];
  1371. X#if defined(_IBMR2) && !defined(SHARED_EDGES)
  1372. X     * RS6000 doesn't seem to draw lower and left edges
  1373. X     * of rectangles correctly.
  1374. X     */
  1375. X    xp--; yp--;
  1376. X    xs++; ys++;
  1377. X#endif
  1378. X    bgnpolygon();
  1379. X    p[0] = xp; p[1] = yp;
  1380. X    CPACK(ll);
  1381. X    v2i(p);
  1382. X    p[0] += xs;
  1383. X    CPACK(lr);
  1384. X    v2i(p);
  1385. X    p[1] += ys;
  1386. X    CPACK(ur);
  1387. X    v2i(p);
  1388. X    p[0] = xp;
  1389. X    CPACK(ul);
  1390. X    v2i(p);
  1391. X    endpolygon();
  1392. XGraphicsLeftMouseEvent()
  1393. X     * Return TRUE if left mouse button is down.
  1394. X     */
  1395. X    return getbutton(LEFTMOUSE);
  1396. XGraphicsMiddleMouseEvent()
  1397. X    return getbutton(MIDDLEMOUSE);
  1398. XGraphicsRightMouseEvent()
  1399. X    return getbutton(RIGHTMOUSE);
  1400. X * Return position of mouse in unnormalized screen coordinates.
  1401. XGraphicsGetMousePos(x, y)
  1402. Xint *x, *y;
  1403. X    int xo, yo;
  1404. X    getorigin(&xo, &yo);
  1405. X    *x = getvaluator( MOUSEX ) - xo;
  1406. X    *y = getvaluator( MOUSEY ) - yo;
  1407. XGraphicsRedraw()
  1408. X    Device dev;
  1409. X    short val;
  1410. X    while (qtest()) {
  1411. X        dev = qread(&val);
  1412. X        if (dev == REDRAW) {
  1413. X            reshapeviewport();
  1414. X            return TRUE;
  1415. X    return FALSE;
  1416. END_OF_FILE
  1417. if test 2838 -ne `wc -c <'raypaint/glgraphics.c'`; then
  1418.     echo shar: \"'raypaint/glgraphics.c'\" unpacked with wrong size!
  1419. # end of 'raypaint/glgraphics.c'
  1420. if test -f 'raypaint/main.c' -a "${1}" != "-c" ; then 
  1421.   echo shar: Will not clobber existing file \"'raypaint/main.c'\"
  1422. echo shar: Extracting \"'raypaint/main.c'\" \(2648 characters\)
  1423. sed "s/^X//" >'raypaint/main.c' <<'END_OF_FILE'
  1424. X * main.c
  1425. X * Copyright (C) 1989, 1991, Craig E. Kolb
  1426. X * All rights reserved.
  1427. X * This software may be freely copied, modified, and redistributed
  1428. X * provided that this copyright notice is preserved on all copies.
  1429. X * You may not distribute this software, in whole or in part, as part of
  1430. X * any commercial product without the express consent of the authors.
  1431. X * There is no warranty or other guarantee of fitness of this software
  1432. X * for any purpose.  It is provided solely "as is".
  1433. X * $Id: main.c,v 4.0 91/07/17 17:36:46 kolb Exp Locker: kolb $
  1434. X * $Log:    main.c,v $
  1435. X * Revision 4.0  91/07/17  17:36:46  kolb
  1436. X * Initial version.
  1437. Xchar rcsid[] = "$Id: main.c,v 4.0 91/07/17 17:36:46 kolb Exp Locker: kolb $";
  1438. X#include "rayshade.h"
  1439. X#include "options.h"
  1440. X#include "stats.h"
  1441. X#include "viewing.h"
  1442. X#include "picture.h"
  1443. Xvoid RSInitialize(), RSStartFrame();
  1444. Xmain(argc, argv)
  1445. Xint argc;
  1446. Xchar **argv;
  1447. X    Float utime, stime;
  1448. X      * Initialize variables, etc.
  1449. X     */
  1450. X    RSInitialize(argc, argv);
  1451. X    RSStartFrame(Options.startframe);
  1452. X      * Print more information than we'll ever need to know...
  1453. X     */
  1454. X    if (Options.verbose) {
  1455. X        extern Geom *World;
  1456. X        /* World object info. */
  1457. X        AggregatePrintInfo(World, Stats.fstats);
  1458. X        /* Print info about rendering options and the like. */
  1459. X        RSOptionsList();
  1460. X     * Print preprocessing time.
  1461. X     */
  1462. X    RSGetCpuTime(&utime, &stime);
  1463. X    fprintf(Stats.fstats,"Preprocessing time:\t");
  1464. X    fprintf(Stats.fstats,"%2.2fu  %2.2fs\n", utime, stime);
  1465. X    fprintf(Stats.fstats,"Starting trace.\n");
  1466. X    (void)fflush(Stats.fstats);
  1467. X     * Render the image.
  1468. X     */
  1469. X    Render(argc, argv);
  1470. X    StatsPrint();
  1471. X    return 0;
  1472. Xstatic void
  1473. XRSStartFrame(frame)
  1474. Xint frame;
  1475. X     * Set the frame start time
  1476. X     */
  1477. X    Options.framenum = frame;
  1478. X    Options.framestart = Options.starttime +
  1479. X            Options.framenum*Options.framelength;
  1480. X    SamplingSetTime(Options.framestart, Options.shutterspeed,
  1481. X            Options.framenum);
  1482. X     * Set up viewing parameters.
  1483. X     */
  1484. X    RSViewing();
  1485. X     * Initialize world
  1486. X     */
  1487. X    WorldSetup();
  1488. X * Initialize non-time-varying goodies.
  1489. Xstatic void
  1490. XRSInitialize(argc, argv)
  1491. Xint argc;
  1492. Xchar **argv;
  1493. X      * Initialize variables, etc.
  1494. X     */
  1495. X    RSSetup();
  1496. X     * Parse options from command line.
  1497. X     */
  1498. X    RSOptionsSet(argc, argv);
  1499. X     * Process input file.
  1500. X     */
  1501. X    if (Options.verbose) {
  1502. X        VersionPrint();
  1503. X        fprintf(Stats.fstats,"Reading input file...\n");
  1504. X        (void)fflush(Stats.fstats);
  1505. X    RSReadInputFile();
  1506. X     * Set variables that weren't set on command line
  1507. X     * or in input file.
  1508. X     */
  1509. X    RSCleanup();
  1510. X     * Set sampling options.
  1511. X     */
  1512. X    SamplingSetOptions(Options.samples, Options.gaussian,
  1513. X               Options.filterwidth);
  1514. END_OF_FILE
  1515. if test 2648 -ne `wc -c <'raypaint/main.c'`; then
  1516.     echo shar: \"'raypaint/main.c'\" unpacked with wrong size!
  1517. # end of 'raypaint/main.c'
  1518. if test -f 'rayshade/Makefile.SH' -a "${1}" != "-c" ; then 
  1519.   echo shar: Will not clobber existing file \"'rayshade/Makefile.SH'\"
  1520. echo shar: Extracting \"'rayshade/Makefile.SH'\" \(2719 characters\)
  1521. sed "s/^X//" >'rayshade/Makefile.SH' <<'END_OF_FILE'
  1522. Xcase $CONFIG in
  1523. X    if test ! -f config.sh; then
  1524. X    ln ../config.sh . || \
  1525. X    ln ../../config.sh . || \
  1526. X    ln ../../../config.sh . || \
  1527. X    (echo "Can't find config.sh."; exit 1)
  1528. X    fi
  1529. X    . config.sh
  1530. X    ;;
  1531. Xesac
  1532. X: This forces SH files to create target in same directory as SH file.
  1533. X: This is so that make depend always knows where to find SH derivatives.
  1534. Xcase "$0" in
  1535. X*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
  1536. Xesac
  1537. Xecho "Extracting Makefile (with variable substitutions)"
  1538. X: This section of the file will have variable substitutions done on it.
  1539. X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
  1540. X: Protect any dollar signs and backticks that you do not want interpreted
  1541. X: by putting a backslash in front.  You may delete these comments.
  1542. X$spitshell >Makefile <<!GROK!THIS!
  1543. X# Makefile for rayshade.
  1544. X# Craig Kolb
  1545. X# \$Id: Makefile.SH,v 4.0 91/07/17 14:50:30 kolb Exp Locker: kolb $
  1546. X# Bin directory
  1547. XBINDIR = $bin 
  1548. XOPTIMIZE = $optimize
  1549. XURTINC = $urtinc
  1550. XCCFLAGS = $ccflags $large
  1551. XURTLIB = $urtlib
  1552. XLDFLAGS = $libs $ldflags
  1553. XCC = $cc
  1554. XMKDEP = $mkdep
  1555. XYACC = $yacc
  1556. XCLC = $lindacc
  1557. X!GROK!THIS!
  1558. X: In the following dollars and backticks do not need the extra backslash.
  1559. X$spitshell >>Makefile <<'!NO!SUBS!'
  1560. XLIBRAYDIR = ../libray
  1561. XLIBSHADEDIR = ../libshade
  1562. XINCLUDE = -I$(LIBRAYDIR) -I$(LIBSHADEDIR) -I.. $(URTINC)
  1563. XYFLAGS = -d
  1564. XLIBRAY = $(LIBRAYDIR)/libray.a
  1565. XLIBSHADE = $(LIBSHADEDIR)/libshade.a
  1566. X# If you are using LINDA, add -DLINDA
  1567. X# If you are running 'tsnet'-style LINDA, add -DTSNET
  1568. X# If you are running on a Multimax, add -DMULTIMAX -DSHAREDMEM
  1569. XCFLAGS = $(CCFLAGS) $(INCLUDE) $(OPTIMIZE)
  1570. X# C-Linda flags, if appropriate
  1571. X#CLFLAGS = -linda ts 20000
  1572. XSHELL = /bin/sh
  1573. XLIBS = $(LIBSHADE) $(LIBRAY) $(URTLIB)
  1574. XDRIVE_C =    main.c raytrace.c version.c
  1575. XDRIVE_H =    raytrace.h
  1576. XDRIVE_O = $(DRIVE_C:.c=.o)
  1577. XHFILES = $(DRIVE_H)
  1578. XCFILES = $(DRIVE_C)
  1579. XSHFILES = Makefile.SH
  1580. XOBJ = $(DRIVE_O)
  1581. XDEPENDSRC = $(DRIVE_C)
  1582. X# Change $(CC) below to $(CLC) if using Linda.
  1583. Xrayshade: $(OBJ) $(LIBS)
  1584. X    $(CC) $(OPTIMIZE) -o rayshade $(OBJ) $(LIBS) $(LDFLAGS)
  1585. X# Uncomment the following rule if using Linda.
  1586. X#raytrace.lo: raytrace.cl
  1587. X#    $(CLC) $(INCLUDE) $(LCFLAGS) -c raytrace.cl
  1588. X# End of configuration section
  1589. Xinstall:    rayshade
  1590. X        mv rayshade $(BINDIR)/rayshade
  1591. Xclean:
  1592. X    rm -f $(OBJ) core
  1593. Xrealclean:
  1594. X    rm -f $(OBJ) core y.tab.h
  1595. X    rm -f *.orig Makefile
  1596. Xlint:
  1597. X    lint $(CFLAGS) -x $(CFILES) -lm
  1598. Xtags:
  1599. X    ctags -t $(CFILES)
  1600. Xdepend:
  1601. X    (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \
  1602. X     $(MKDEP) $(DEPENDSRC) | sed 's/: \.\//: /; /\/usr\/include/d' \
  1603. X    ) >Makefile.new
  1604. X    cp Makefile Makefile.bak
  1605. X    cp Makefile.new Makefile
  1606. X    rm -f Makefile.new
  1607. X# DO NOT DELETE THIS LINE
  1608. X!NO!SUBS!
  1609. Xchmod 755 Makefile
  1610. X$eunicefix Makefile
  1611. END_OF_FILE
  1612. if test 2719 -ne `wc -c <'rayshade/Makefile.SH'`; then
  1613.     echo shar: \"'rayshade/Makefile.SH'\" unpacked with wrong size!
  1614. chmod +x 'rayshade/Makefile.SH'
  1615. # end of 'rayshade/Makefile.SH'
  1616. if test -f 'rayview/Makefile.SH' -a "${1}" != "-c" ; then 
  1617.   echo shar: Will not clobber existing file \"'rayview/Makefile.SH'\"
  1618. echo shar: Extracting \"'rayview/Makefile.SH'\" \(2878 characters\)
  1619. sed "s/^X//" >'rayview/Makefile.SH' <<'END_OF_FILE'
  1620. Xcase $CONFIG in
  1621. X    if test ! -f config.sh; then
  1622. X    ln ../config.sh . || \
  1623. X    ln ../../config.sh . || \
  1624. X    ln ../../../config.sh . || \
  1625. X    (echo "Can't find config.sh."; exit 1)
  1626. X    fi
  1627. X    . config.sh
  1628. X    ;;
  1629. Xesac
  1630. X: This forces SH files to create target in same directory as SH file.
  1631. X: This is so that make depend always knows where to find SH derivatives.
  1632. Xcase "$0" in
  1633. X*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
  1634. Xesac
  1635. Xecho "Extracting Makefile (with variable substitutions)"
  1636. X: This section of the file will have variable substitutions done on it.
  1637. X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
  1638. X: Protect any dollar signs and backticks that you do not want interpreted
  1639. X: by putting a backslash in front.  You may delete these comments.
  1640. X$spitshell >Makefile <<!GROK!THIS!
  1641. X# Makefile for rayview 
  1642. X# Craig Kolb
  1643. X# \$Id: Makefile.SH,v 4.0 91/07/17 14:55:03 kolb Exp Locker: kolb $
  1644. X# Bin directory
  1645. XBINDIR = $bin 
  1646. X# If you are using LINDA, add -DLINDA
  1647. X# If you are running on a Multimax, add -DMULTIMAX -DSHAREDMEM
  1648. X# Be sure to add any necessary floating point hardware switches.
  1649. XOPTIMIZE = $optimize
  1650. XURTINC = $urtinc
  1651. XCCFLAGS = $ccflags $large
  1652. XURTLIB = $urtlib
  1653. XLDFLAGS = $libs $ldflags
  1654. XCC = $cc
  1655. XMKDEP = $mkdep
  1656. XYACC = $yacc
  1657. X!GROK!THIS!
  1658. X: In the following dollars and backticks do not need the extra backslash.
  1659. X$spitshell >>Makefile <<'!NO!SUBS!'
  1660. XLIBRAYDIR = ../libray
  1661. XLIBSHADEDIR = ../libshade
  1662. XINCLUDE = -I$(LIBRAYDIR) -I$(LIBSHADEDIR) -I..
  1663. XYFLAGS = -d
  1664. X# If using GL on an SGI machine, use:
  1665. XGRAPHICSLIBS = -lsphere -lgl_s
  1666. XSPHERELIB = -DSPHERELIB
  1667. X# If using GL on an RS6000, use:
  1668. X#GRAPHICSLIBS = -lgl
  1669. X#SPHERELIB=
  1670. XLIBRAY = $(LIBRAYDIR)/libray.a
  1671. XLIBSHADE = $(LIBSHADEDIR)/libshade.a
  1672. XCFLAGS = $(CCFLAGS) $(SPHERELIB) $(URTINC) $(INCLUDE) $(OPTIMIZE)
  1673. XSHELL = /bin/sh
  1674. X# If you have a fast malloc library, use it (e.g., -lmalloc on MIPS machines)
  1675. XLIBS = $(LIBSHADE) $(LIBRAY) $(URTLIB)
  1676. XDRIVE_C =    main.c glmethods.c spheregen.c version.c
  1677. XDRIVE_O = $(DRIVE_C:.c=.o)
  1678. XCFILES = $(DRIVE_C)
  1679. XSHFILES = Makefile.SH
  1680. XOBJ = $(DRIVE_O)
  1681. XDEPENDSRC = $(DRIVE_C)
  1682. X# Change $(CC) below to $(LCC) if using Linda.
  1683. Xrayview: $(OBJ) $(LIBS)
  1684. X    $(CC) $(OPTIMIZE) -o rayview $(OBJ) $(GRAPHICSLIBS) $(LIBS) $(LDFLAGS)
  1685. X# Uncomment the following rule if using Linda.
  1686. X#raytrace.lo: raytrace.cl
  1687. X#    $(LCC) $(CFLAGS) -c raytrace.cl
  1688. X# End of configuration section
  1689. Xinstall:    rayview    
  1690. X        mv rayview $(BINDIR)/rayview
  1691. Xclean:
  1692. X    rm -f $(OBJ) core
  1693. Xrealclean:
  1694. X    rm -f $(OBJ) core y.tab.h
  1695. X    rm -f *.orig Makefile
  1696. Xlint:
  1697. X    lint $(CFLAGS) -x $(CFILES) -lm
  1698. Xtags:
  1699. X    ctags -t $(CFILES)
  1700. Xdepend:
  1701. X    (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \
  1702. X     $(MKDEP) $(DEPENDSRC) | sed 's/: \.\//: /; /\/usr\/include/d' \
  1703. X    ) >Makefile.new
  1704. X    cp Makefile Makefile.bak
  1705. X    cp Makefile.new Makefile
  1706. X    rm -f Makefile.new
  1707. X# DO NOT DELETE THIS LINE
  1708. X!NO!SUBS!
  1709. Xchmod 755 Makefile
  1710. X$eunicefix Makefile
  1711. END_OF_FILE
  1712. if test 2878 -ne `wc -c <'rayview/Makefile.SH'`; then
  1713.     echo shar: \"'rayview/Makefile.SH'\" unpacked with wrong size!
  1714. chmod +x 'rayview/Makefile.SH'
  1715. # end of 'rayview/Makefile.SH'
  1716. echo shar: End of archive 6 \(of 19\).
  1717. cp /dev/null ark6isdone
  1718. MISSING=""
  1719. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ; do
  1720.     if test ! -f ark${I}isdone ; then
  1721.     MISSING="${MISSING} ${I}"
  1722.     fi
  1723. if test "${MISSING}" = "" ; then
  1724.     echo You have unpacked all 19 archives.
  1725.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1726.     echo You still need to unpack the following archives:
  1727.     echo "        " ${MISSING}
  1728. ##  End of shell archive.
  1729. exit 0
  1730. exit 0 # Just in case...
  1731.