home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume21 / rayshade / part04 < prev    next >
Text File  |  1991-07-21  |  54KB  |  1,935 lines

  1. Newsgroups: comp.sources.misc
  2. From: Rayshade Construction Co. <rayshade@weedeater.math.YALE.EDU>
  3. Subject:  v21i007:  rayshade - A raytracing package for UNIX, Part04/19
  4. Message-ID: <1991Jul20.043407.11353@sparky.IMD.Sterling.COM>
  5. X-Md4-Signature: 7b543a14c18501c9a4c88042d53111e6
  6. Date: Sat, 20 Jul 1991 04:34:07 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: Rayshade Construction Co. <rayshade@weedeater.math.YALE.EDU>
  10. Posting-number: Volume 21, Issue 7
  11. Archive-name: rayshade/part04
  12. Environment: UNIX, !16BIT
  13.  
  14. #! /bin/sh
  15. # This is a shell archive.  Remove anything before this line, then unpack
  16. # it by saving it into a file and typing "sh file".  To overwrite existing
  17. # files, type "sh file -c".  You can also feed this as standard input via
  18. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  19. # will see the following message at the end:
  20. #        "End of archive 4 (of 19)."
  21. # Contents:  etc/rsconvert/Makefile.SH etc/rsconvert/main.c
  22. #   libray/libcommon/Makefile.SH libray/libcommon/memory.c
  23. #   libray/libcommon/scale.c libray/libcommon/translate.c
  24. #   libray/libimage/Makefile.SH libray/liblight/Makefile.SH
  25. #   libray/liblight/infinite.c libray/liblight/point.c
  26. #   libray/libobj/Makefile.SH libray/libobj/blob.h
  27. #   libray/libobj/grid.h libray/libobj/triangle.h
  28. #   libray/libsurf/Makefile.SH libray/libsurf/fog.c
  29. #   libray/libsurf/mist.c libray/libtext/Makefile.SH
  30. #   libray/libtext/marble.c libray/libtext/sky.c
  31. #   libray/libtext/windy.c libshade/defaults.h raypaint/README
  32. #   rayview/main.c
  33. # Wrapped by kolb@woody on Wed Jul 17 17:56:43 1991
  34. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  35. if test -f 'etc/rsconvert/Makefile.SH' -a "${1}" != "-c" ; then 
  36.   echo shar: Will not clobber existing file \"'etc/rsconvert/Makefile.SH'\"
  37. else
  38. echo shar: Extracting \"'etc/rsconvert/Makefile.SH'\" \(1615 characters\)
  39. sed "s/^X//" >'etc/rsconvert/Makefile.SH' <<'END_OF_FILE'
  40. Xcase $CONFIG in
  41. X'')
  42. X    if test ! -f config.sh; then
  43. X    ln ../config.sh . || \
  44. X    ln ../../config.sh . || \
  45. X    ln ../../../config.sh . || \
  46. X    (echo "Can't find config.sh."; exit 1)
  47. X    fi
  48. X    . config.sh
  49. X    ;;
  50. Xesac
  51. X: This forces SH files to create target in same directory as SH file.
  52. X: This is so that make depend always knows where to find SH derivatives.
  53. Xcase "$0" in
  54. X*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
  55. Xesac
  56. Xecho "Extracting etc/rsconvert/Makefile (with variable substitutions)"
  57. X: This section of the file will have variable substitutions done on it.
  58. X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
  59. X: Protect any dollar signs and backticks that you do not want interpreted
  60. X: by putting a backslash in front.  You may delete these comments.
  61. X$spitshell >Makefile <<!GROK!THIS!
  62. XOPTIMIZE = $optimize
  63. XCCFLAGS = $ccflags $large
  64. XCC = $cc
  65. XMKDEP = $mkdep
  66. XYACC = $yacc
  67. X!GROK!THIS!
  68. X
  69. X: In the following dollars and backticks do not need the extra backslash.
  70. X$spitshell >>Makefile <<'!NO!SUBS!'
  71. XLIBRAYDIR = ../../libray
  72. XINCLUDE = -I$(LIBRAYDIR) -I../../
  73. XCFLAGS = $(CCFLAGS) $(INCLUDE) $(OPTIMIZE)
  74. XLIBS =
  75. XYFLAGS = -d
  76. X
  77. XCFILES = main.c yacc.c lex.c
  78. XOBJS = $(CFILES:.c=.o)
  79. XDEPENDSRC = main.c yacc.y lex.l
  80. X
  81. Xrsconvert: $(OBJS)
  82. X    $(CC) $(CFLAGS) -o rsconvert $(OBJS) $(LIBS)
  83. X
  84. Xdepend:
  85. X    (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \
  86. X     $(MKDEP) $(DEPENDSRC) | sed 's/: \.\//: /; /\/usr\/include/d' \
  87. X    ) >Makefile.new
  88. X    cp Makefile Makefile.bak
  89. X    cp Makefile.new Makefile
  90. X    rm -f Makefile.new
  91. X
  92. Xclean:
  93. X    /bin/rm -f y.tab.h $(OBJS) lex.c
  94. X
  95. X# DO NOT DELETE THIS LINE
  96. X!NO!SUBS!
  97. Xchmod 755 Makefile
  98. X$eunicefix Makefile
  99. END_OF_FILE
  100. if test 1615 -ne `wc -c <'etc/rsconvert/Makefile.SH'`; then
  101.     echo shar: \"'etc/rsconvert/Makefile.SH'\" unpacked with wrong size!
  102. fi
  103. chmod +x 'etc/rsconvert/Makefile.SH'
  104. # end of 'etc/rsconvert/Makefile.SH'
  105. fi
  106. if test -f 'etc/rsconvert/main.c' -a "${1}" != "-c" ; then 
  107.   echo shar: Will not clobber existing file \"'etc/rsconvert/main.c'\"
  108. else
  109. echo shar: Extracting \"'etc/rsconvert/main.c'\" \(1614 characters\)
  110. sed "s/^X//" >'etc/rsconvert/main.c' <<'END_OF_FILE'
  111. X/*
  112. X * main.c
  113. X *
  114. X * Copyright (C) 1989, 1991, Craig E. Kolb
  115. X * All rights reserved.
  116. X *
  117. X * This software may be freely copied, modified, and redistributed
  118. X * provided that this copyright notice is preserved on all copies.
  119. X *
  120. X * You may not distribute this software, in whole or in part, as part of
  121. X * any commercial product without the express consent of the authors.
  122. X *
  123. X * There is no warranty or other guarantee of fitness of this software
  124. X * for any purpose.  It is provided solely "as is".
  125. X *
  126. X * $Id: main.c,v 4.0 91/07/17 14:29:30 kolb Exp Locker: kolb $
  127. X *
  128. X * $Log:    main.c,v $
  129. X * Revision 4.0  91/07/17  14:29:30  kolb
  130. X * Initial version.
  131. X * 
  132. X */
  133. X#include <stdio.h>
  134. X#ifdef SYSV
  135. X#include <memory.h>
  136. X#endif
  137. X#include "libcommon/common.h"
  138. X
  139. Xextern FILE *yyin;
  140. X
  141. X#define usage(v)        fprintf(stderr,"usage: %s [oldfile]\n",v)
  142. X
  143. Xmain(argc, argv)
  144. Xint argc;
  145. Xchar **argv;
  146. X{
  147. X    if (argc > 2) {
  148. X        usage(argv[0]);
  149. X        exit(1);
  150. X    }
  151. X
  152. X    if (argc == 2) {
  153. X        yyin = fopen(argv[1], "r");
  154. X        if (yyin == (FILE *)NULL) {
  155. X            fprintf(stderr,"Cannot open %s\n",argv[1]);
  156. X            exit(2);
  157. X        }
  158. X    } else
  159. X        yyin = stdin;
  160. X    printf("/* Converted by rsconvert */\n");
  161. X    yyparse();
  162. X}    
  163. X
  164. Xchar *
  165. Xstrsave(s)
  166. Xchar *s;
  167. X{
  168. X    extern voidstar Malloc();
  169. X    char *r;
  170. X
  171. X    r = (char *)Malloc(strlen(s) + 1);
  172. X    strcpy(r, s);
  173. X    return r;
  174. X}
  175. X
  176. Xvoidstar
  177. XMalloc(n)
  178. Xunsigned n;
  179. X{
  180. X    voidstar r;
  181. X    extern voidstar malloc();
  182. X
  183. X    r = malloc(n);
  184. X    if (r == (voidstar)NULL) {
  185. X        fprintf(stderr,"Out of memory allocating %d bytes.\n");
  186. X        exit(1);
  187. X    }
  188. X    return r;
  189. X}
  190. X
  191. Xvoidstar
  192. XCalloc(nelem, elen)
  193. Xunsigned nelem, elen;
  194. X{
  195. X    voidstar res;
  196. X
  197. X    res = Malloc(nelem*elen);
  198. X    bzero(res, (int)nelem*elen);
  199. X    return res;
  200. X}
  201. END_OF_FILE
  202. if test 1614 -ne `wc -c <'etc/rsconvert/main.c'`; then
  203.     echo shar: \"'etc/rsconvert/main.c'\" unpacked with wrong size!
  204. fi
  205. # end of 'etc/rsconvert/main.c'
  206. fi
  207. if test -f 'libray/libcommon/Makefile.SH' -a "${1}" != "-c" ; then 
  208.   echo shar: Will not clobber existing file \"'libray/libcommon/Makefile.SH'\"
  209. else
  210. echo shar: Extracting \"'libray/libcommon/Makefile.SH'\" \(1594 characters\)
  211. sed "s/^X//" >'libray/libcommon/Makefile.SH' <<'END_OF_FILE'
  212. Xcase $CONFIG in
  213. X'')
  214. X    if test ! -f config.sh; then
  215. X    ln ../config.sh . || \
  216. X    ln ../../config.sh . || \
  217. X    ln ../../../config.sh . || \
  218. X    (echo "Can't find config.sh."; exit 1)
  219. X    fi
  220. X    . config.sh
  221. X    ;;
  222. Xesac
  223. X: This forces SH files to create target in same directory as SH file.
  224. X: This is so that make depend always knows where to find SH derivatives.
  225. Xcase "$0" in
  226. X*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
  227. Xesac
  228. Xecho "Extracting libcommon/Makefile (with variable substitutions)"
  229. X: This section of the file will have variable substitutions done on it.
  230. X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
  231. X: Protect any dollar signs and backticks that you do not want interpreted
  232. X: by putting a backslash in front.  You may delete these comments.
  233. X$spitshell >Makefile <<!GROK!THIS!
  234. XOPTIMIZE = $optimize
  235. XCCFLAGS = $ccflags $large
  236. XRANLIB = $ranlib
  237. XCC = $cc
  238. XMKDEP = $mkdep
  239. X
  240. X!GROK!THIS!
  241. X
  242. X: In the following dollars and backticks do not need the extra backslash.
  243. X$spitshell >>Makefile <<'!NO!SUBS!'
  244. XLIB = ../libray.a
  245. XINCLUDE = -I../..
  246. XCFLAGS = $(CCFLAGS) $(INCLUDE) $(OPTIMIZE)
  247. XSHELL = /bin/sh
  248. X
  249. XCFILES = memory.c expr.c transform.c rotate.c sampling.c scale.c translate.c vecmath.c
  250. XOFILES = $(CFILES:.c=.o)
  251. X
  252. X$(LIB): $(OFILES)
  253. X    ar cur $(LIB) $(OFILES)
  254. X    $(RANLIB) $(LIB)
  255. X
  256. Xclean:
  257. X    rm -f $(OFILES)
  258. X
  259. Xdepend:
  260. X    (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \
  261. X     $(MKDEP) $(CFILES) | sed 's/: \.\//: /; /\/usr\/include/d' \
  262. X    ) >Makefile.new
  263. X    cp Makefile Makefile.bak
  264. X    cp Makefile.new Makefile
  265. X    rm -f Makefile.new
  266. X
  267. X# DO NOT DELETE THIS LINE
  268. X!NO!SUBS!
  269. Xchmod 755 Makefile
  270. X$eunicefix Makefile
  271. END_OF_FILE
  272. if test 1594 -ne `wc -c <'libray/libcommon/Makefile.SH'`; then
  273.     echo shar: \"'libray/libcommon/Makefile.SH'\" unpacked with wrong size!
  274. fi
  275. chmod +x 'libray/libcommon/Makefile.SH'
  276. # end of 'libray/libcommon/Makefile.SH'
  277. fi
  278. if test -f 'libray/libcommon/memory.c' -a "${1}" != "-c" ; then 
  279.   echo shar: Will not clobber existing file \"'libray/libcommon/memory.c'\"
  280. else
  281. echo shar: Extracting \"'libray/libcommon/memory.c'\" \(1646 characters\)
  282. sed "s/^X//" >'libray/libcommon/memory.c' <<'END_OF_FILE'
  283. X/*
  284. X * memory.c
  285. X *
  286. X * Copyright (C) 1989, 1991, Craig E. Kolb
  287. X * All rights reserved.
  288. X *
  289. X * This software may be freely copied, modified, and redistributed
  290. X * provided that this copyright notice is preserved on all copies.
  291. X *
  292. X * You may not distribute this software, in whole or in part, as part of
  293. X * any commercial product without the express consent of the authors.
  294. X *
  295. X * There is no warranty or other guarantee of fitness of this software
  296. X * for any purpose.  It is provided solely "as is".
  297. X *
  298. X * $Id: memory.c,v 4.0 91/07/17 14:30:57 kolb Exp Locker: kolb $
  299. X *
  300. X * $Log:    memory.c,v $
  301. X * Revision 4.0  91/07/17  14:30:57  kolb
  302. X * Initial version.
  303. X * 
  304. X */
  305. X#ifdef SYSV
  306. X#include <memory.h>
  307. X#endif
  308. X#include "common.h"
  309. X
  310. Xunsigned long TotalAllocated;
  311. X
  312. Xvoidstar
  313. XMalloc(bytes)
  314. Xunsigned bytes;
  315. X{
  316. X    voidstar res;
  317. X
  318. X    TotalAllocated += bytes;
  319. X
  320. X    res = (voidstar)malloc(bytes);
  321. X    if (res == (voidstar)NULL)
  322. X        RLerror(RL_PANIC,
  323. X            "Out of memory trying to allocate %d bytes.\n",bytes);
  324. X    return res;
  325. X}
  326. X
  327. Xvoidstar
  328. XCalloc(nelem, elen)
  329. Xunsigned nelem, elen;
  330. X{
  331. X    voidstar res;
  332. X
  333. X    res = Malloc(nelem*elen);
  334. X    bzero(res, (int)nelem*elen);
  335. X    return res;
  336. X}
  337. X
  338. Xvoid
  339. XPrintMemoryStats(fp)
  340. XFILE *fp;
  341. X{
  342. X    fprintf(fp,"Total memory allocated:\t\t%lu bytes\n",
  343. X            TotalAllocated);
  344. X}
  345. X
  346. X/*
  347. X * Allocate space for a string, copy string into space.
  348. X */
  349. Xchar *
  350. Xstrsave(s)
  351. Xchar *s;
  352. X{
  353. X    char *tmp;
  354. X
  355. X    if (s == (char *)NULL)
  356. X        return (char *)NULL;
  357. X
  358. X    tmp = (char *)Malloc((unsigned)strlen(s) + 1);
  359. X    (void)strcpy(tmp, s);
  360. X    return tmp;
  361. X}
  362. X
  363. X#ifdef MULTIMAX
  364. X
  365. Xchar *
  366. Xshare_calloc(num, siz)
  367. Xint num;
  368. Xunsigned int siz;
  369. X{
  370. X    char *res;
  371. X
  372. X    res = share_malloc(num*siz);
  373. X    bzero(res, num*siz);
  374. X    return res;
  375. X}
  376. X#endif
  377. END_OF_FILE
  378. if test 1646 -ne `wc -c <'libray/libcommon/memory.c'`; then
  379.     echo shar: \"'libray/libcommon/memory.c'\" unpacked with wrong size!
  380. fi
  381. # end of 'libray/libcommon/memory.c'
  382. fi
  383. if test -f 'libray/libcommon/scale.c' -a "${1}" != "-c" ; then 
  384.   echo shar: Will not clobber existing file \"'libray/libcommon/scale.c'\"
  385. else
  386. echo shar: Extracting \"'libray/libcommon/scale.c'\" \(1761 characters\)
  387. sed "s/^X//" >'libray/libcommon/scale.c' <<'END_OF_FILE'
  388. X/*
  389. X * scale.c
  390. X *
  391. X * Copyright (C) 1989, 1991, Craig E. Kolb
  392. X * All rights reserved.
  393. X *
  394. X * This software may be freely copied, modified, and redistributed
  395. X * provided that this copyright notice is preserved on all copies.
  396. X *
  397. X * You may not distribute this software, in whole or in part, as part of
  398. X * any commercial product without the express consent of the authors.
  399. X * 
  400. X * There is no warranty or other guarantee of fitness of this software
  401. X * for any purpose.  It is provided solely "as is".
  402. X *
  403. X * $Id: scale.c,v 4.0 91/07/17 14:32:08 kolb Exp Locker: kolb $
  404. X *
  405. X * $Log:    scale.c,v $
  406. X * Revision 4.0  91/07/17  14:32:08  kolb
  407. X * Initial version.
  408. X * 
  409. X */
  410. X#include "common.h"
  411. X#include "scale.h"
  412. X
  413. XTransMethods *iScaleMethods;
  414. Xvoid ScaleMatrix();
  415. X
  416. XScale *
  417. XScaleCreate()
  418. X{
  419. X    Scale *res;
  420. X
  421. X    res = (Scale *)Malloc(sizeof(Scale));
  422. X    res->x = res->y = res->z = 1.;
  423. X    return res;
  424. X}
  425. X
  426. XTransMethods *
  427. XScaleMethods()
  428. X{
  429. X    if (iScaleMethods == (TransMethods *)NULL) {
  430. X        iScaleMethods = (TransMethods *)Malloc(sizeof(TransMethods));
  431. X        iScaleMethods->create = (TransCreateFunc *)ScaleCreate;
  432. X        iScaleMethods->propagate = ScalePropagate;
  433. X    }
  434. X    return iScaleMethods;    
  435. X}
  436. X
  437. Xvoid
  438. XScalePropagate(scale, trans, itrans)
  439. XScale *scale;
  440. XRSMatrix *trans, *itrans;
  441. X{
  442. X    if (equal(scale->x, 0.) || equal(scale->y, 0.) || equal(scale->z, 0.))
  443. X        RLerror(RL_PANIC, "Degenerate scale %g %g %g\n", scale->x, scale->y, scale->z);
  444. X    ScaleMatrix(scale->x, scale->y, scale->z, trans);
  445. X    /*
  446. X     * Build the inverse
  447. X     */
  448. X    MatrixInit(itrans);
  449. X    itrans->matrix[0][0] = 1. / scale->x;
  450. X    itrans->matrix[1][1] = 1. / scale->y;
  451. X    itrans->matrix[2][2] = 1. / scale->z;
  452. X}
  453. X
  454. Xvoid
  455. XScaleMatrix(x, y, z, mat)
  456. XFloat x, y, z;
  457. XRSMatrix *mat;
  458. X{
  459. X    MatrixInit(mat);
  460. X    mat->matrix[0][0] = x;
  461. X    mat->matrix[1][1] = y;
  462. X    mat->matrix[2][2] = z;
  463. X}
  464. END_OF_FILE
  465. if test 1761 -ne `wc -c <'libray/libcommon/scale.c'`; then
  466.     echo shar: \"'libray/libcommon/scale.c'\" unpacked with wrong size!
  467. fi
  468. # end of 'libray/libcommon/scale.c'
  469. fi
  470. if test -f 'libray/libcommon/translate.c' -a "${1}" != "-c" ; then 
  471.   echo shar: Will not clobber existing file \"'libray/libcommon/translate.c'\"
  472. else
  473. echo shar: Extracting \"'libray/libcommon/translate.c'\" \(1722 characters\)
  474. sed "s/^X//" >'libray/libcommon/translate.c' <<'END_OF_FILE'
  475. X/*
  476. X * translate.c
  477. X *
  478. X * Copyright (C) 1989, 1991, Craig E. Kolb
  479. X * All rights reserved.
  480. X *
  481. X * This software may be freely copied, modified, and redistributed
  482. X * provided that this copyright notice is preserved on all copies.
  483. X *
  484. X * You may not distribute this software, in whole or in part, as part of
  485. X * any commercial product without the express consent of the authors.
  486. X * 
  487. X * There is no warranty or other guarantee of fitness of this software
  488. X * for any purpose.  It is provided solely "as is".
  489. X *
  490. X * $Id: translate.c,v 4.0 91/07/17 14:32:42 kolb Exp Locker: kolb $
  491. X *
  492. X * $Log:    translate.c,v $
  493. X * Revision 4.0  91/07/17  14:32:42  kolb
  494. X * Initial version.
  495. X * 
  496. X */
  497. X#include "common.h"
  498. X#include "translate.h"
  499. X
  500. XTransMethods *iTranslateMethods;
  501. Xvoid TranslationMatrix();
  502. X
  503. XTranslate *
  504. XTranslateCreate()
  505. X{
  506. X    Translate *res;
  507. X
  508. X    res = (Translate *)Malloc(sizeof(Translate));
  509. X    res->x = res->y = res->z = 0.;
  510. X    return res;
  511. X}
  512. X
  513. XTransMethods *
  514. XTranslateMethods()
  515. X{
  516. X    if (iTranslateMethods == (TransMethods *)NULL) {
  517. X        iTranslateMethods = (TransMethods *)Malloc(sizeof(TransMethods));
  518. X        iTranslateMethods->create = (TransCreateFunc *)TranslateCreate;
  519. X        iTranslateMethods->propagate = TranslatePropagate;
  520. X    }
  521. X    return iTranslateMethods;    
  522. X}
  523. X
  524. Xvoid
  525. XTranslatePropagate(translate, trans, itrans)
  526. XTranslate *translate;
  527. XRSMatrix *trans, *itrans;
  528. X{
  529. X    TranslationMatrix(translate->x, translate->y, translate->z, trans);
  530. X    /*
  531. X     * Build the inverse...
  532. X     */
  533. X    MatrixInit(itrans);
  534. X    itrans->translate.x = -translate->x;
  535. X    itrans->translate.y = -translate->y;
  536. X    itrans->translate.z = -translate->z;
  537. X}
  538. X
  539. Xvoid
  540. XTranslationMatrix(x, y, z, mat)
  541. XFloat x, y, z;
  542. XRSMatrix *mat;
  543. X{
  544. X    MatrixInit(mat);
  545. X    mat->translate.x = x;
  546. X    mat->translate.y = y;
  547. X    mat->translate.z = z;
  548. X}
  549. END_OF_FILE
  550. if test 1722 -ne `wc -c <'libray/libcommon/translate.c'`; then
  551.     echo shar: \"'libray/libcommon/translate.c'\" unpacked with wrong size!
  552. fi
  553. # end of 'libray/libcommon/translate.c'
  554. fi
  555. if test -f 'libray/libimage/Makefile.SH' -a "${1}" != "-c" ; then 
  556.   echo shar: Will not clobber existing file \"'libray/libimage/Makefile.SH'\"
  557. else
  558. echo shar: Extracting \"'libray/libimage/Makefile.SH'\" \(1548 characters\)
  559. sed "s/^X//" >'libray/libimage/Makefile.SH' <<'END_OF_FILE'
  560. Xcase $CONFIG in
  561. X'')
  562. X    if test ! -f config.sh; then
  563. X    ln ../config.sh . || \
  564. X    ln ../../config.sh . || \
  565. X    ln ../../../config.sh . || \
  566. X    (echo "Can't find config.sh."; exit 1)
  567. X    fi
  568. X    . config.sh
  569. X    ;;
  570. Xesac
  571. X: This forces SH files to create target in same directory as SH file.
  572. X: This is so that make depend always knows where to find SH derivatives.
  573. Xcase "$0" in
  574. X*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
  575. Xesac
  576. Xecho "Extracting libimage/Makefile (with variable substitutions)"
  577. X: This section of the file will have variable substitutions done on it.
  578. X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
  579. X: Protect any dollar signs and backticks that you do not want interpreted
  580. X: by putting a backslash in front.  You may delete these comments.
  581. X$spitshell >Makefile <<!GROK!THIS!
  582. XOPTIMIZE = $optimize
  583. XCCFLAGS = $ccflags $large
  584. XRANLIB = $ranlib
  585. XCC = $cc
  586. XMKDEP = $mkdep
  587. XURTINC = $urtinc
  588. X
  589. X!GROK!THIS!
  590. X
  591. X: In the following dollars and backticks do not need the extra backslash.
  592. X$spitshell >>Makefile <<'!NO!SUBS!'
  593. XLIB = ../libray.a
  594. XINCLUDE = -I.. -I../.. $(URTINC)
  595. XCFLAGS = $(CCFLAGS) $(INCLUDE) $(OPTIMIZE)
  596. XSHELL = /bin/sh
  597. X
  598. XOFILES = image.o
  599. XCFILES = image.c
  600. X
  601. X
  602. X$(LIB): $(OFILES)
  603. X    ar cur $(LIB) $(OFILES)
  604. X    $(RANLIB) $(LIB)
  605. X
  606. Xclean:
  607. X    rm -f $(OFILES)
  608. X
  609. Xdepend:
  610. X    (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \
  611. X     $(MKDEP) $(CFILES) | sed 's/: \.\//: /; /\/usr\/include/d' \
  612. X    ) >Makefile.new
  613. X    cp Makefile Makefile.bak
  614. X    cp Makefile.new Makefile
  615. X    rm -f Makefile.new
  616. X
  617. X# DO NOT DELETE THIS LINE
  618. X!NO!SUBS!
  619. Xchmod 755 Makefile
  620. X$eunicefix Makefile
  621. END_OF_FILE
  622. if test 1548 -ne `wc -c <'libray/libimage/Makefile.SH'`; then
  623.     echo shar: \"'libray/libimage/Makefile.SH'\" unpacked with wrong size!
  624. fi
  625. chmod +x 'libray/libimage/Makefile.SH'
  626. # end of 'libray/libimage/Makefile.SH'
  627. fi
  628. if test -f 'libray/liblight/Makefile.SH' -a "${1}" != "-c" ; then 
  629.   echo shar: Will not clobber existing file \"'libray/liblight/Makefile.SH'\"
  630. else
  631. echo shar: Extracting \"'libray/liblight/Makefile.SH'\" \(1585 characters\)
  632. sed "s/^X//" >'libray/liblight/Makefile.SH' <<'END_OF_FILE'
  633. Xcase $CONFIG in
  634. X'')
  635. X    if test ! -f config.sh; then
  636. X    ln ../config.sh . || \
  637. X    ln ../../config.sh . || \
  638. X    ln ../../../config.sh . || \
  639. X    (echo "Can't find config.sh."; exit 1)
  640. X    fi
  641. X    . config.sh
  642. X    ;;
  643. Xesac
  644. X: This forces SH files to create target in same directory as SH file.
  645. X: This is so that make depend always knows where to find SH derivatives.
  646. Xcase "$0" in
  647. X*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
  648. Xesac
  649. Xecho "Extracting liblight/Makefile (with variable substitutions)"
  650. X: This section of the file will have variable substitutions done on it.
  651. X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
  652. X: Protect any dollar signs and backticks that you do not want interpreted
  653. X: by putting a backslash in front.  You may delete these comments.
  654. X$spitshell >Makefile <<!GROK!THIS!
  655. XOPTIMIZE = $optimize
  656. XCCFLAGS = $ccflags $large
  657. XRANLIB = $ranlib
  658. XCC = $cc
  659. XMKDEP = $mkdep
  660. X
  661. X!GROK!THIS!
  662. X
  663. X: In the following dollars and backticks do not need the extra backslash.
  664. X$spitshell >>Makefile <<'!NO!SUBS!'
  665. XLIB = ../libray.a
  666. XINCLUDE = -I.. -I../..
  667. XCFLAGS = $(CCFLAGS) $(INCLUDE) $(OPTIMIZE)
  668. XSHELL = /bin/sh
  669. X
  670. XCFILES = light.c extended.c infinite.c jittered.c point.c shadow.c spot.c
  671. XOFILES = $(CFILES:.c=.o)
  672. X
  673. X$(LIB): $(OFILES)
  674. X    ar cur $(LIB) $(OFILES)
  675. X    $(RANLIB) $(LIB)
  676. X
  677. Xclean:
  678. X    rm -f $(OFILES)
  679. X
  680. Xdepend:
  681. X    (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \
  682. X     $(MKDEP) $(CFILES) | sed 's/: \.\//: /; /\/usr\/include/d' \
  683. X    ) >Makefile.new
  684. X    cp Makefile Makefile.bak
  685. X    cp Makefile.new Makefile
  686. X    rm -f Makefile.new
  687. X
  688. X# DO NOT DELETE THIS LINE
  689. X!NO!SUBS!
  690. Xchmod 755 Makefile
  691. X$eunicefix Makefile
  692. END_OF_FILE
  693. if test 1585 -ne `wc -c <'libray/liblight/Makefile.SH'`; then
  694.     echo shar: \"'libray/liblight/Makefile.SH'\" unpacked with wrong size!
  695. fi
  696. chmod +x 'libray/liblight/Makefile.SH'
  697. # end of 'libray/liblight/Makefile.SH'
  698. fi
  699. if test -f 'libray/liblight/infinite.c' -a "${1}" != "-c" ; then 
  700.   echo shar: Will not clobber existing file \"'libray/liblight/infinite.c'\"
  701. else
  702. echo shar: Extracting \"'libray/liblight/infinite.c'\" \(1698 characters\)
  703. sed "s/^X//" >'libray/liblight/infinite.c' <<'END_OF_FILE'
  704. X/*
  705. X * infinite.c
  706. X *
  707. X * Copyright (C) 1989, 1991, Craig E. Kolb
  708. X * All rights reserved.
  709. X *
  710. X * This software may be freely copied, modified, and redistributed
  711. X * provided that this copyright notice is preserved on all copies.
  712. X *
  713. X * You may not distribute this software, in whole or in part, as part of
  714. X * any commercial product without the express consent of the authors.
  715. X *
  716. X * There is no warranty or other guarantee of fitness of this software
  717. X * for any purpose.  It is provided solely "as is".
  718. X *
  719. X * $Id: infinite.c,v 4.0 91/07/17 14:34:28 kolb Exp Locker: kolb $
  720. X *
  721. X * $Log:    infinite.c,v $
  722. X * Revision 4.0  91/07/17  14:34:28  kolb
  723. X * Initial version.
  724. X * 
  725. X */
  726. X#include "light.h"
  727. X#include "infinite.h"
  728. X
  729. Xstatic LightMethods *iInfMethods = NULL;
  730. X
  731. XInfinite *
  732. XInfiniteCreate(dir)
  733. XVector *dir;
  734. X{
  735. X    Infinite *inf;
  736. X
  737. X    inf = (Infinite *)share_malloc(sizeof(Infinite));
  738. X    inf->dir = *dir;
  739. X    if (VecNormalize(&inf->dir) == 0.) {
  740. X        RLerror(RL_ABORT, "Invalid directional light.\n");
  741. X        return (Infinite *)NULL;
  742. X    }
  743. X    return inf;
  744. X}
  745. X
  746. XLightMethods *
  747. XInfiniteMethods()
  748. X{
  749. X    if (iInfMethods == (LightMethods *)NULL) {
  750. X        iInfMethods = LightMethodsCreate();
  751. X        iInfMethods->intens = InfiniteIntens;
  752. X        iInfMethods->dir = InfiniteDirection;
  753. X    }
  754. X    return iInfMethods;
  755. X}
  756. X
  757. Xint
  758. XInfiniteIntens(inf, lcolor, cache, ray, dist, noshadow, color)
  759. XInfinite *inf;
  760. XColor *lcolor, *color;
  761. XShadowCache *cache;
  762. XRay *ray;
  763. XFloat dist;
  764. Xint noshadow;
  765. X{
  766. X    return !Shadowed(color, lcolor, cache, ray, dist, noshadow);
  767. X}
  768. X
  769. Xvoid
  770. XInfiniteDirection(lp, pos, dir, dist)
  771. XInfinite *lp;
  772. XVector *pos, *dir;
  773. XFloat *dist;
  774. X{
  775. X    *dir = lp->dir;
  776. X    *dist = FAR_AWAY;
  777. X}
  778. X
  779. XInfiniteMethodRegister(meth)
  780. XUserMethodType meth;
  781. X{
  782. X    if (iInfMethods)
  783. X        iInfMethods->user = meth;
  784. X}
  785. END_OF_FILE
  786. if test 1698 -ne `wc -c <'libray/liblight/infinite.c'`; then
  787.     echo shar: \"'libray/liblight/infinite.c'\" unpacked with wrong size!
  788. fi
  789. # end of 'libray/liblight/infinite.c'
  790. fi
  791. if test -f 'libray/liblight/point.c' -a "${1}" != "-c" ; then 
  792.   echo shar: Will not clobber existing file \"'libray/liblight/point.c'\"
  793. else
  794. echo shar: Extracting \"'libray/liblight/point.c'\" \(1655 characters\)
  795. sed "s/^X//" >'libray/liblight/point.c' <<'END_OF_FILE'
  796. X/*
  797. X * point.c
  798. X *
  799. X * Copyright (C) 1989, 1991, Craig E. Kolb
  800. X * All rights reserved.
  801. X *
  802. X * This software may be freely copied, modified, and redistributed
  803. X * provided that this copyright notice is preserved on all copies.
  804. X *
  805. X * You may not distribute this software, in whole or in part, as part of
  806. X * any commercial product without the express consent of the authors.
  807. X *
  808. X * There is no warranty or other guarantee of fitness of this software
  809. X * for any purpose.  It is provided solely "as is".
  810. X *
  811. X * $Id: point.c,v 4.0 91/07/17 14:35:20 kolb Exp Locker: kolb $
  812. X *
  813. X * $Log:    point.c,v $
  814. X * Revision 4.0  91/07/17  14:35:20  kolb
  815. X * Initial version.
  816. X * 
  817. X */
  818. X#include "light.h"
  819. X#include "point.h"
  820. X
  821. Xstatic LightMethods *iPointMethods = NULL;
  822. X
  823. XPointlight *
  824. XPointCreate(pos)
  825. XVector *pos;
  826. X{
  827. X    Pointlight *p;
  828. X
  829. X    p = (Pointlight *)share_malloc(sizeof(Pointlight));
  830. X    p->pos = *pos;
  831. X    return p;
  832. X}
  833. X
  834. XLightMethods *
  835. XPointMethods()
  836. X{
  837. X    if (iPointMethods == (LightMethods *)NULL) {
  838. X        iPointMethods = LightMethodsCreate();
  839. X        iPointMethods->intens = PointIntens;
  840. X        iPointMethods->dir = PointDirection;
  841. X    }
  842. X    return iPointMethods;
  843. X}
  844. X
  845. Xint
  846. XPointIntens(lp, lcolor, cache, ray, dist, noshadow, color)
  847. XPointlight *lp;
  848. XColor *lcolor, *color;
  849. XShadowCache *cache;
  850. XRay *ray;
  851. XFloat dist;
  852. Xint noshadow;
  853. X{
  854. X    return !Shadowed(color, lcolor, cache, ray, dist, noshadow);
  855. X}
  856. X
  857. Xvoid
  858. XPointDirection(lp, pos, dir, dist)
  859. XPointlight *lp;
  860. XVector *pos, *dir;
  861. XFloat *dist;
  862. X{
  863. X    /*
  864. X     * Calculate dir from position to center of
  865. X     * light source.
  866. X     */
  867. X    VecSub(lp->pos, *pos, dir);
  868. X    *dist = VecNormalize(dir);
  869. X}
  870. X
  871. XPointMethodRegister(meth)
  872. XUserMethodType meth;
  873. X{
  874. X    if (iPointMethods)
  875. X        iPointMethods->user = meth;
  876. X}
  877. END_OF_FILE
  878. if test 1655 -ne `wc -c <'libray/liblight/point.c'`; then
  879.     echo shar: \"'libray/liblight/point.c'\" unpacked with wrong size!
  880. fi
  881. # end of 'libray/liblight/point.c'
  882. fi
  883. if test -f 'libray/libobj/Makefile.SH' -a "${1}" != "-c" ; then 
  884.   echo shar: Will not clobber existing file \"'libray/libobj/Makefile.SH'\"
  885. else
  886. echo shar: Extracting \"'libray/libobj/Makefile.SH'\" \(1680 characters\)
  887. sed "s/^X//" >'libray/libobj/Makefile.SH' <<'END_OF_FILE'
  888. Xcase $CONFIG in
  889. X'')
  890. X    if test ! -f config.sh; then
  891. X    ln ../config.sh . || \
  892. X    ln ../../config.sh . || \
  893. X    ln ../../../config.sh . || \
  894. X    (echo "Can't find config.sh."; exit 1)
  895. X    fi
  896. X    . config.sh
  897. X    ;;
  898. Xesac
  899. X: This forces SH files to create target in same directory as SH file.
  900. X: This is so that make depend always knows where to find SH derivatives.
  901. Xcase "$0" in
  902. X*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
  903. Xesac
  904. Xecho "Extracting libobj/Makefile (with variable substitutions)"
  905. X: This section of the file will have variable substitutions done on it.
  906. X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
  907. X: Protect any dollar signs and backticks that you do not want interpreted
  908. X: by putting a backslash in front.  You may delete these comments.
  909. X$spitshell >Makefile <<!GROK!THIS!
  910. XOPTIMIZE = $optimize
  911. XCCFLAGS = $ccflags $large
  912. XRANLIB = $ranlib
  913. XCC = $cc
  914. XMKDEP = $mkdep
  915. X
  916. X!GROK!THIS!
  917. X
  918. X: In the following dollars and backticks do not need the extra backslash.
  919. X$spitshell >>Makefile <<'!NO!SUBS!'
  920. XLIB = ../libray.a
  921. XINCLUDE = -I.. -I../..
  922. XCFLAGS = $(CCFLAGS) $(INCLUDE) $(OPTIMIZE)
  923. XSHELL = /bin/sh
  924. X
  925. XCFILES = blob.c bounds.c box.c cone.c csg.c cylinder.c disc.c grid.c \
  926. X     hf.c instance.c list.c intersect.c geom.c plane.c poly.c \
  927. X     roots.c sphere.c torus.c triangle.c
  928. X
  929. XOFILES = $(CFILES:.c=.o)
  930. X
  931. X$(LIB): $(OFILES)
  932. X    ar cur $(LIB) $(OFILES)
  933. X    $(RANLIB) $(LIB)
  934. X
  935. Xclean:
  936. X    rm -f $(OFILES)
  937. X
  938. Xdepend:
  939. X    (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \
  940. X     $(MKDEP) $(CFILES) | sed 's/: \.\//: /; /\/usr\/include/d' \
  941. X    ) >Makefile.new
  942. X    cp Makefile Makefile.bak
  943. X    cp Makefile.new Makefile
  944. X    rm -f Makefile.new
  945. X
  946. X# DO NOT DELETE THIS LINE
  947. X!NO!SUBS!
  948. Xchmod 755 Makefile
  949. X$eunicefix Makefile
  950. END_OF_FILE
  951. if test 1680 -ne `wc -c <'libray/libobj/Makefile.SH'`; then
  952.     echo shar: \"'libray/libobj/Makefile.SH'\" unpacked with wrong size!
  953. fi
  954. chmod +x 'libray/libobj/Makefile.SH'
  955. # end of 'libray/libobj/Makefile.SH'
  956. fi
  957. if test -f 'libray/libobj/blob.h' -a "${1}" != "-c" ; then 
  958.   echo shar: Will not clobber existing file \"'libray/libobj/blob.h'\"
  959. else
  960. echo shar: Extracting \"'libray/libobj/blob.h'\" \(1574 characters\)
  961. sed "s/^X//" >'libray/libobj/blob.h' <<'END_OF_FILE'
  962. X/*
  963. X * blob.h
  964. X *
  965. X * Copyright (C) 1990, 1991, Mark Polipec, Craig E. Kolb
  966. X * All rights reserved.
  967. X *
  968. X * This software may be freely copied, modified, and redistributed
  969. X * provided that this copyright notice is preserved on all copies.
  970. X *
  971. X * You may not distribute this software, in whole or in part, as part of
  972. X * any commercial product without the express consent of the authors.
  973. X *
  974. X * There is no warranty or other guarantee of fitness of this software
  975. X * for any purpose.  It is provided solely "as is".
  976. X *
  977. X * $Id: blob.h,v 4.0 91/07/17 14:36:12 kolb Exp Locker: kolb $
  978. X *
  979. X * $Log:    blob.h,v $
  980. X * Revision 4.0  91/07/17  14:36:12  kolb
  981. X * Initial version.
  982. X * 
  983. X */
  984. X#ifndef BLOB_H
  985. X#define BLOB_H
  986. X
  987. X#define GeomBlobCreate(t,m,n) GeomCreate((GeomRef)BlobCreate(t,m,n), BlobMethods())
  988. X
  989. X#define R_START 1
  990. X#define R_END   0
  991. X
  992. X/*
  993. X * Blob
  994. X */
  995. Xtypedef struct {
  996. X    Float rs;    /* radius */
  997. X    Float c4;    /* coeefficient */
  998. X    Float c2;    /* coeefficient */
  999. X    Float c0;    /* coeefficient */
  1000. X    Float x;    /* x position */
  1001. X    Float y;    /* y position */
  1002. X    Float z;    /* z position */
  1003. X} MetaVector;
  1004. X
  1005. Xtypedef struct {
  1006. X    int type,pnt;
  1007. X    Float bound;
  1008. X    Float c[5];
  1009. X} MetaInt;
  1010. X
  1011. Xtypedef struct {
  1012. X    Float T;        /* Threshold   */
  1013. X        int num;        /* number of points */
  1014. X        MetaVector *list;    /* list of points */
  1015. X    MetaInt *ilist, **iarr;
  1016. X        
  1017. X} Blob;
  1018. X
  1019. Xtypedef struct MetaList {
  1020. X    MetaVector mvec;
  1021. X    struct MetaList *next;
  1022. X} MetaList;
  1023. X
  1024. Xextern int    BlobIntersect(), BlobNormal();
  1025. Xextern void    BlobBounds(), BlobStats();
  1026. Xextern Blob    *BlobCreate();
  1027. Xextern char    *BlobName();
  1028. Xextern Methods    *BlobMethods();
  1029. X
  1030. X#endif /* BLOB_H */
  1031. END_OF_FILE
  1032. if test 1574 -ne `wc -c <'libray/libobj/blob.h'`; then
  1033.     echo shar: \"'libray/libobj/blob.h'\" unpacked with wrong size!
  1034. fi
  1035. # end of 'libray/libobj/blob.h'
  1036. fi
  1037. if test -f 'libray/libobj/grid.h' -a "${1}" != "-c" ; then 
  1038.   echo shar: Will not clobber existing file \"'libray/libobj/grid.h'\"
  1039. else
  1040. echo shar: Extracting \"'libray/libobj/grid.h'\" \(1751 characters\)
  1041. sed "s/^X//" >'libray/libobj/grid.h' <<'END_OF_FILE'
  1042. X/*
  1043. X * grid.h
  1044. X *
  1045. X * Copyright (C) 1989, 1991, Craig E. Kolb
  1046. X * All rights reserved.
  1047. X *
  1048. X * This software may be freely copied, modified, and redistributed
  1049. X * provided that this copyright notice is preserved on all copies.
  1050. X *
  1051. X * You may not distribute this software, in whole or in part, as part of
  1052. X * any commercial product without the express consent of the authors.
  1053. X *
  1054. X * There is no warranty or other guarantee of fitness of this software
  1055. X * for any purpose.  It is provided solely "as is".
  1056. X *
  1057. X * $Id: grid.h,v 4.0 91/07/17 14:38:07 kolb Exp Locker: kolb $
  1058. X *
  1059. X * $Log:    grid.h,v $
  1060. X * Revision 4.0  91/07/17  14:38:07  kolb
  1061. X * Initial version.
  1062. X * 
  1063. X */
  1064. X#ifndef GRID_H
  1065. X#define GRID_H
  1066. X
  1067. X#define GeomGridCreate(x,y,z)    GeomCreate((GeomRef)GridCreate(x,y,z), \
  1068. X                    GridMethods())
  1069. X/*
  1070. X * Convert from voxel number along X/Y/Z to corresponding coordinate.
  1071. X */
  1072. X#define voxel2x(g,x)        ((x) * g->voxsize[0] + g->bounds[0][0])
  1073. X#define voxel2y(g,y)        ((y) * g->voxsize[1] + g->bounds[0][1])
  1074. X#define voxel2z(g,z)        ((z) * g->voxsize[2] + g->bounds[0][2])
  1075. X/*
  1076. X * And vice-versa.
  1077. X */
  1078. X#define x2voxel(g,x)        (((x) - g->bounds[0][0]) / g->voxsize[0])
  1079. X#define y2voxel(g,y)        (((y) - g->bounds[0][1]) / g->voxsize[1])
  1080. X#define z2voxel(g,z)        (((z) - g->bounds[0][2]) / g->voxsize[2])
  1081. X
  1082. X/*
  1083. X * Grid object
  1084. X */
  1085. Xtypedef struct {
  1086. X    short    xsize, ysize, zsize;    /* # of voxels along each axis */
  1087. X    Float    bounds[2][3];        /* bounding box */
  1088. X    Float    voxsize[3];        /* size of a voxel */
  1089. X    struct    Geom    *unbounded,    /* unbounded objects */
  1090. X            *objects;    /* all bounded objects */
  1091. X    struct    GeomList    ****cells;    /* Voxels */
  1092. X} Grid;
  1093. X
  1094. Xextern char    *GridName();
  1095. Xextern void    *GirdBounds();
  1096. Xextern int    GridIntersect(), GridConvert();
  1097. Xextern Grid    *GridCreate();
  1098. Xextern Methods    *GridMethods();
  1099. X
  1100. X#endif /* GRID_H */
  1101. END_OF_FILE
  1102. if test 1751 -ne `wc -c <'libray/libobj/grid.h'`; then
  1103.     echo shar: \"'libray/libobj/grid.h'\" unpacked with wrong size!
  1104. fi
  1105. # end of 'libray/libobj/grid.h'
  1106. fi
  1107. if test -f 'libray/libobj/triangle.h' -a "${1}" != "-c" ; then 
  1108.   echo shar: Will not clobber existing file \"'libray/libobj/triangle.h'\"
  1109. else
  1110. echo shar: Extracting \"'libray/libobj/triangle.h'\" \(1589 characters\)
  1111. sed "s/^X//" >'libray/libobj/triangle.h' <<'END_OF_FILE'
  1112. X/*
  1113. X * triangle.h
  1114. X *
  1115. X * Copyright (C) 1989, 1991, Craig E. Kolb
  1116. X * All rights reserved.
  1117. X *
  1118. X * This software may be freely copied, modified, and redistributed
  1119. X * provided that this copyright notice is preserved on all copies.
  1120. X *
  1121. X * You may not distribute this software, in whole or in part, as part of
  1122. X * any commercial product without the express consent of the authors.
  1123. X *
  1124. X * There is no warranty or other guarantee of fitness of this software
  1125. X * for any purpose.  It is provided solely "as is".
  1126. X *
  1127. X * $Id: triangle.h,v 4.0 91/07/17 14:39:43 kolb Exp Locker: kolb $
  1128. X *
  1129. X * $Log:    triangle.h,v $
  1130. X * Revision 4.0  91/07/17  14:39:43  kolb
  1131. X * Initial version.
  1132. X * 
  1133. X */
  1134. X#ifndef TRIANGLE_H
  1135. X#define TRIANGLE_H
  1136. X
  1137. X#define FLATTRI        0
  1138. X#define PHONGTRI    1
  1139. X
  1140. X#define GeomTriangleCreate(t,a,b,c,d,e,f,g,h,i,s)  GeomCreate( \
  1141. X        (GeomRef)TriangleCreate(t,a,b,c,d,e,f,g,h,i,s), TriangleMethods())
  1142. X
  1143. X/*
  1144. X * Triangle
  1145. X */
  1146. Xtypedef struct {
  1147. X    Vector    nrm,        /* triangle normal */
  1148. X        p[3],        /* vertices */
  1149. X        e[3],        /* "edge" vectors (scaled) */
  1150. X        *vnorm,        /* Array of vertex normals */
  1151. X        *dpdu, *dpdv;    /* U and V direction vectors */
  1152. X    Float    d,        /* plane constant  */
  1153. X        b[3];        /* Array of barycentric coordinates */
  1154. X    Vec2d    *uv;        /* Array of UV coordinates of vertices */
  1155. X    char    index,        /* Flag used for shading/intersection test. */
  1156. X        type;        /* type (to detect if phong or flat) */
  1157. X} Triangle;
  1158. X
  1159. Xextern Triangle    *TriangleCreate();
  1160. Xextern int    TriangleIntersect(), TriangleNormal();
  1161. Xextern void    TriangleBounds(), TriangleUV(),
  1162. X        TriangleStats();
  1163. Xextern Methods    *TriangleMethods();
  1164. Xchar        *TriangleName();
  1165. X#endif /* TRIANGLE_H */
  1166. END_OF_FILE
  1167. if test 1589 -ne `wc -c <'libray/libobj/triangle.h'`; then
  1168.     echo shar: \"'libray/libobj/triangle.h'\" unpacked with wrong size!
  1169. fi
  1170. # end of 'libray/libobj/triangle.h'
  1171. fi
  1172. if test -f 'libray/libsurf/Makefile.SH' -a "${1}" != "-c" ; then 
  1173.   echo shar: Will not clobber existing file \"'libray/libsurf/Makefile.SH'\"
  1174. else
  1175. echo shar: Extracting \"'libray/libsurf/Makefile.SH'\" \(1577 characters\)
  1176. sed "s/^X//" >'libray/libsurf/Makefile.SH' <<'END_OF_FILE'
  1177. Xcase $CONFIG in
  1178. X'')
  1179. X    if test ! -f config.sh; then
  1180. X    ln ../config.sh . || \
  1181. X    ln ../../config.sh . || \
  1182. X    ln ../../../config.sh . || \
  1183. X    (echo "Can't find config.sh."; exit 1)
  1184. X    fi
  1185. X    . config.sh
  1186. X    ;;
  1187. Xesac
  1188. X: This forces SH files to create target in same directory as SH file.
  1189. X: This is so that make depend always knows where to find SH derivatives.
  1190. Xcase "$0" in
  1191. X*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
  1192. Xesac
  1193. Xecho "Extracting libsurf/Makefile (with variable substitutions)"
  1194. X: This section of the file will have variable substitutions done on it.
  1195. X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
  1196. X: Protect any dollar signs and backticks that you do not want interpreted
  1197. X: by putting a backslash in front.  You may delete these comments.
  1198. X$spitshell >Makefile <<!GROK!THIS!
  1199. XOPTIMIZE = $optimize
  1200. XCCFLAGS = $ccflags $large
  1201. XRANLIB = $ranlib
  1202. XCC = $cc
  1203. XMKDEP = $mkdep
  1204. X
  1205. X!GROK!THIS!
  1206. X
  1207. X: In the following dollars and backticks do not need the extra backslash.
  1208. X$spitshell >>Makefile <<'!NO!SUBS!'
  1209. XLIB = ../libray.a
  1210. XINCLUDE = -I.. -I../..
  1211. XCFLAGS = $(INCLUDE) $(CCFLAGS) $(OPTIMIZE)
  1212. XSHELL = /bin/sh
  1213. X
  1214. XCFILES = atmosphere.c fog.c fogdeck.c mist.c surface.c surfshade.c
  1215. XOFILES = $(CFILES:.c=.o)
  1216. X
  1217. X$(LIB): $(OFILES)
  1218. X    ar cur $(LIB) $(OFILES)
  1219. X    $(RANLIB) $(LIB)
  1220. X
  1221. Xclean:
  1222. X    rm -f $(OFILES)
  1223. X
  1224. Xdepend:
  1225. X    (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \
  1226. X     $(MKDEP) $(CFILES) | sed 's/: \.\//: /; /\/usr\/include/d' \
  1227. X    ) >Makefile.new
  1228. X    cp Makefile Makefile.bak
  1229. X    cp Makefile.new Makefile
  1230. X    rm -f Makefile.new
  1231. X
  1232. X# DO NOT DELETE THIS LINE
  1233. X!NO!SUBS!
  1234. Xchmod 755 Makefile
  1235. X$eunicefix Makefile
  1236. END_OF_FILE
  1237. if test 1577 -ne `wc -c <'libray/libsurf/Makefile.SH'`; then
  1238.     echo shar: \"'libray/libsurf/Makefile.SH'\" unpacked with wrong size!
  1239. fi
  1240. chmod +x 'libray/libsurf/Makefile.SH'
  1241. # end of 'libray/libsurf/Makefile.SH'
  1242. fi
  1243. if test -f 'libray/libsurf/fog.c' -a "${1}" != "-c" ; then 
  1244.   echo shar: Will not clobber existing file \"'libray/libsurf/fog.c'\"
  1245. else
  1246. echo shar: Extracting \"'libray/libsurf/fog.c'\" \(1675 characters\)
  1247. sed "s/^X//" >'libray/libsurf/fog.c' <<'END_OF_FILE'
  1248. X/*
  1249. X * fog.c
  1250. X *
  1251. X * Copyright (C) 1989, 1991, Craig E. Kolb
  1252. X * All rights reserved.
  1253. X *
  1254. X * This software may be freely copied, modified, and redistributed
  1255. X * provided that this copyright notice is preserved on all copies.
  1256. X *
  1257. X * You may not distribute this software, in whole or in part, as part of
  1258. X * any commercial product without the express consent of the authors.
  1259. X *
  1260. X * There is no warranty or other guarantee of fitness of this software
  1261. X * for any purpose.  It is provided solely "as is".
  1262. X *
  1263. X * $Id: fog.c,v 4.0 91/07/17 14:40:14 kolb Exp Locker: kolb $
  1264. X *
  1265. X * $Log:    fog.c,v $
  1266. X * Revision 4.0  91/07/17  14:40:14  kolb
  1267. X * Initial version.
  1268. X * 
  1269. X */
  1270. X#include "atmosphere.h"
  1271. X#include "fog.h"
  1272. X
  1273. XFog *
  1274. XFogCreate(color, trans)
  1275. XColor *color, *trans;
  1276. X{
  1277. X    Fog *fog;
  1278. X    static void ComputeFog();
  1279. X
  1280. X    fog = (Fog *)Malloc(sizeof(Fog));
  1281. X
  1282. X    if (color == (Color *)NULL)
  1283. X        fog->color.r = fog->color.g = fog->color.b = 0.;
  1284. X    else
  1285. X        fog->color = *color;
  1286. X    if (trans == (Color *)NULL)
  1287. X        fog->trans.r = fog->trans.g = fog->trans.b = FAR_AWAY;
  1288. X    else {
  1289. X        fog->trans = *trans;
  1290. X    }
  1291. X    return fog;
  1292. X}
  1293. X
  1294. X/*
  1295. X * Add fog to the given color.
  1296. X */
  1297. Xvoid
  1298. XFogApply(fog, ray, pos, dist, color)
  1299. XFog *fog;
  1300. XRay *ray;
  1301. XVector *pos;
  1302. XFloat dist;
  1303. XColor *color;
  1304. X{
  1305. X    Float atten;
  1306. X    extern Float ExpAtten();
  1307. X
  1308. X    atten = ExpAtten(dist, fog->trans.r);
  1309. X    if (fog->trans.r == fog->trans.g && fog->trans.r == fog->trans.b) {
  1310. X        ColorBlend(color, &fog->color, atten, 1. - atten);
  1311. X        return;
  1312. X    }
  1313. X    color->r = atten*color->r + (1. - atten) * fog->color.r;
  1314. X
  1315. X    atten = ExpAtten(dist, fog->trans.g);
  1316. X    color->g = atten*color->g + (1. - atten) * fog->color.g;
  1317. X    atten = ExpAtten(dist, fog->trans.b);
  1318. X    color->b = atten*color->b + (1. - atten) * fog->color.b;
  1319. X}
  1320. END_OF_FILE
  1321. if test 1675 -ne `wc -c <'libray/libsurf/fog.c'`; then
  1322.     echo shar: \"'libray/libsurf/fog.c'\" unpacked with wrong size!
  1323. fi
  1324. # end of 'libray/libsurf/fog.c'
  1325. fi
  1326. if test -f 'libray/libsurf/mist.c' -a "${1}" != "-c" ; then 
  1327.   echo shar: Will not clobber existing file \"'libray/libsurf/mist.c'\"
  1328. else
  1329. echo shar: Extracting \"'libray/libsurf/mist.c'\" \(1698 characters\)
  1330. sed "s/^X//" >'libray/libsurf/mist.c' <<'END_OF_FILE'
  1331. X/*
  1332. X * mist.c
  1333. X *
  1334. X * Copyright (C) 1989, 1991, Craig E. Kolb
  1335. X * All rights reserved.
  1336. X *
  1337. X * This software may be freely copied, modified, and redistributed
  1338. X * provided that this copyright notice is preserved on all copies.
  1339. X *
  1340. X * You may not distribute this software, in whole or in part, as part of
  1341. X * any commercial product without the express consent of the authors.
  1342. X *
  1343. X * There is no warranty or other guarantee of fitness of this software
  1344. X * for any purpose.  It is provided solely "as is".
  1345. X *
  1346. X * $Id: mist.c,v 4.0 91/07/17 14:40:42 kolb Exp Locker: kolb $
  1347. X *
  1348. X * $Log:    mist.c,v $
  1349. X * Revision 4.0  91/07/17  14:40:42  kolb
  1350. X * Initial version.
  1351. X * 
  1352. X */
  1353. X#include "atmosphere.h"
  1354. X#include "mist.h"
  1355. X
  1356. XMist *
  1357. XMistCreate(color, trans, zero, scale)
  1358. XColor *color, *trans;
  1359. XFloat zero, scale;
  1360. X{
  1361. X    Mist *mist;
  1362. X
  1363. X    mist = (Mist *)Malloc(sizeof(Mist));
  1364. X    mist->color = *color;
  1365. X    mist->trans = *trans;
  1366. X    mist->zero = zero;
  1367. X    mist->scale = 1. / scale;
  1368. X    return mist;
  1369. X}
  1370. X
  1371. X/*
  1372. X * Add low-altitude mist to the given color.
  1373. X */
  1374. Xvoid
  1375. XMistApply(mist, ray, pos, dist, color)
  1376. XMist *mist;
  1377. XRay *ray;
  1378. XVector *pos;
  1379. XFloat dist;
  1380. XColor *color;
  1381. X{
  1382. X    Float deltaZ, d, atten;
  1383. X    extern Float ExpAtten();
  1384. X
  1385. X    deltaZ = mist->scale * (pos->z - ray->pos.z);
  1386. X    if (fabs(deltaZ) > EPSILON)
  1387. X        d = (exp(-ray->pos.z*mist->scale + mist->zero) -
  1388. X                exp(-pos->z*mist->scale + mist->zero)) / deltaZ;
  1389. X    else
  1390. X        d = exp(-pos->z*mist->scale + mist->zero);
  1391. X
  1392. X    dist *= d;
  1393. X
  1394. X    atten = ExpAtten(dist, mist->trans.r);
  1395. X    color->r = atten*color->r + (1. - atten)*mist->color.r;
  1396. X
  1397. X    atten = ExpAtten(dist, mist->trans.g);
  1398. X    color->g = atten*color->g + (1. - atten)*mist->color.g;
  1399. X
  1400. X    atten = ExpAtten(dist, mist->trans.b);
  1401. X    color->b = atten*color->b + (1. - atten)*mist->color.b;
  1402. X}
  1403. END_OF_FILE
  1404. if test 1698 -ne `wc -c <'libray/libsurf/mist.c'`; then
  1405.     echo shar: \"'libray/libsurf/mist.c'\" unpacked with wrong size!
  1406. fi
  1407. # end of 'libray/libsurf/mist.c'
  1408. fi
  1409. if test -f 'libray/libtext/Makefile.SH' -a "${1}" != "-c" ; then 
  1410.   echo shar: Will not clobber existing file \"'libray/libtext/Makefile.SH'\"
  1411. else
  1412. echo shar: Extracting \"'libray/libtext/Makefile.SH'\" \(1683 characters\)
  1413. sed "s/^X//" >'libray/libtext/Makefile.SH' <<'END_OF_FILE'
  1414. Xcase $CONFIG in
  1415. X'')
  1416. X    if test ! -f config.sh; then
  1417. X    ln ../config.sh . || \
  1418. X    ln ../../config.sh . || \
  1419. X    ln ../../../config.sh . || \
  1420. X    (echo "Can't find config.sh."; exit 1)
  1421. X    fi
  1422. X    . config.sh
  1423. X    ;;
  1424. Xesac
  1425. X: This forces SH files to create target in same directory as SH file.
  1426. X: This is so that make depend always knows where to find SH derivatives.
  1427. Xcase "$0" in
  1428. X*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
  1429. Xesac
  1430. Xecho "Extracting libtext/Makefile (with variable substitutions)"
  1431. X: This section of the file will have variable substitutions done on it.
  1432. X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
  1433. X: Protect any dollar signs and backticks that you do not want interpreted
  1434. X: by putting a backslash in front.  You may delete these comments.
  1435. X$spitshell >Makefile <<!GROK!THIS!
  1436. XOPTIMIZE = $optimize
  1437. XCCFLAGS = $ccflags $large
  1438. XRANLIB = $ranlib
  1439. XCC = $cc
  1440. XMKDEP = $mkdep
  1441. X
  1442. X!GROK!THIS!
  1443. X
  1444. X: In the following dollars and backticks do not need the extra backslash.
  1445. X$spitshell >>Makefile <<'!NO!SUBS!'
  1446. XLIB = ../libray.a
  1447. XINCLUDE = -I.. -I../..
  1448. XCFLAGS = $(CCFLAGS) $(INCLUDE) $(OPTIMIZE)
  1449. XSHELL = /bin/sh
  1450. X
  1451. XCFILES = blotch.c bump.c checker.c cloud.c fbm.c fbmbump.c gloss.c \
  1452. X     imagetext.c mapping.c marble.c mount.c noise.c sky.c stripe.c \
  1453. X     textaux.c texture.c windy.c wood.c
  1454. X
  1455. XOFILES = $(CFILES:.c=.o)
  1456. X
  1457. X$(LIB): $(OFILES)
  1458. X    ar cur $(LIB) $(OFILES)
  1459. X    $(RANLIB) $(LIB)
  1460. X
  1461. Xclean:
  1462. X    rm -f $(OFILES)
  1463. X
  1464. Xdepend:
  1465. X    (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \
  1466. X     $(MKDEP) $(CFILES) | sed 's/: \.\//: /; /\/usr\/include/d' \
  1467. X    ) >Makefile.new
  1468. X    cp Makefile Makefile.bak
  1469. X    cp Makefile.new Makefile
  1470. X    rm -f Makefile.new
  1471. X
  1472. X# DO NOT DELETE THIS LINE
  1473. X!NO!SUBS!
  1474. Xchmod 755 Makefile
  1475. X$eunicefix Makefile
  1476. END_OF_FILE
  1477. if test 1683 -ne `wc -c <'libray/libtext/Makefile.SH'`; then
  1478.     echo shar: \"'libray/libtext/Makefile.SH'\" unpacked with wrong size!
  1479. fi
  1480. chmod +x 'libray/libtext/Makefile.SH'
  1481. # end of 'libray/libtext/Makefile.SH'
  1482. fi
  1483. if test -f 'libray/libtext/marble.c' -a "${1}" != "-c" ; then 
  1484.   echo shar: Will not clobber existing file \"'libray/libtext/marble.c'\"
  1485. else
  1486. echo shar: Extracting \"'libray/libtext/marble.c'\" \(1558 characters\)
  1487. sed "s/^X//" >'libray/libtext/marble.c' <<'END_OF_FILE'
  1488. X/*
  1489. X * marble.c
  1490. X *
  1491. X * Copyright (C) 1989, 1991, Craig E. Kolb
  1492. X * All rights reserved.
  1493. X *
  1494. X * This software may be freely copied, modified, and redistributed
  1495. X * provided that this copyright notice is preserved on all copies.
  1496. X *
  1497. X * You may not distribute this software, in whole or in part, as part of
  1498. X * any commercial product without the express consent of the authors.
  1499. X *
  1500. X * There is no warranty or other guarantee of fitness of this software
  1501. X * for any purpose.  It is provided solely "as is".
  1502. X *
  1503. X * $Id: marble.c,v 4.0 91/07/17 14:43:06 kolb Exp Locker: kolb $
  1504. X *
  1505. X * $Log:    marble.c,v $
  1506. X * Revision 4.0  91/07/17  14:43:06  kolb
  1507. X * Initial version.
  1508. X * 
  1509. X */
  1510. X#include "texture.h"
  1511. X#include "marble.h"
  1512. X
  1513. XMarbleText *
  1514. XMarbleCreate(mapname)
  1515. Xchar *mapname;
  1516. X{
  1517. X    MarbleText *marble;
  1518. X
  1519. X    marble = (MarbleText *)Malloc(sizeof(MarbleText));
  1520. X    if (mapname)
  1521. X        marble->colormap = ColormapRead(mapname);
  1522. X    else
  1523. X        marble->colormap = (Color *)NULL;
  1524. X    return marble;
  1525. X}
  1526. X
  1527. Xvoid
  1528. XMarbleApply(marble, prim, ray, pos, norm, gnorm, surf)
  1529. XMarbleText *marble;
  1530. XGeom *prim;
  1531. XRay *ray;
  1532. XVector *pos, *norm, *gnorm;
  1533. XSurface *surf;
  1534. X{
  1535. X    Float val;
  1536. X    int index;
  1537. X
  1538. X    val = Marble(pos);
  1539. X    if (marble->colormap) {
  1540. X        index = (int)(255. * val);
  1541. X        surf->diff.r *= marble->colormap[index].r;
  1542. X        surf->diff.g *= marble->colormap[index].g;
  1543. X        surf->diff.b *= marble->colormap[index].b;
  1544. X        surf->amb.r *= marble->colormap[index].r;
  1545. X        surf->amb.g *= marble->colormap[index].g;
  1546. X        surf->amb.b *= marble->colormap[index].b;
  1547. X    } else {
  1548. X        ColorScale(val, surf->amb, &surf->amb);
  1549. X        ColorScale(val, surf->diff, &surf->diff);
  1550. X    }
  1551. X}
  1552. END_OF_FILE
  1553. if test 1558 -ne `wc -c <'libray/libtext/marble.c'`; then
  1554.     echo shar: \"'libray/libtext/marble.c'\" unpacked with wrong size!
  1555. fi
  1556. # end of 'libray/libtext/marble.c'
  1557. fi
  1558. if test -f 'libray/libtext/sky.c' -a "${1}" != "-c" ; then 
  1559.   echo shar: Will not clobber existing file \"'libray/libtext/sky.c'\"
  1560. else
  1561. echo shar: Extracting \"'libray/libtext/sky.c'\" \(1656 characters\)
  1562. sed "s/^X//" >'libray/libtext/sky.c' <<'END_OF_FILE'
  1563. X/*
  1564. X * sky.c
  1565. X *
  1566. X * Copyright (C) 1989, 1991, Craig E. Kolb
  1567. X * All rights reserved.
  1568. X *
  1569. X * This software may be freely copied, modified, and redistributed
  1570. X * provided that this copyright notice is preserved on all copies.
  1571. X *
  1572. X * You may not distribute this software, in whole or in part, as part of
  1573. X * any commercial product without the express consent of the authors.
  1574. X *
  1575. X * There is no warranty or other guarantee of fitness of this software
  1576. X * for any purpose.  It is provided solely "as is".
  1577. X *
  1578. X * $Id: sky.c,v 4.0 91/07/17 14:43:43 kolb Exp Locker: kolb $
  1579. X *
  1580. X * $Log:    sky.c,v $
  1581. X * Revision 4.0  91/07/17  14:43:43  kolb
  1582. X * Initial version.
  1583. X * 
  1584. X */
  1585. X#include "texture.h"
  1586. X#include "sky.h"
  1587. X
  1588. XSky *
  1589. XSkyCreate(scale, h, lambda, octaves, cthresh, lthresh)
  1590. XFloat h, lambda, scale, cthresh, lthresh;
  1591. Xint octaves;
  1592. X{
  1593. X    Sky *sky;
  1594. X
  1595. X    sky = (Sky *)Malloc(sizeof(Sky));
  1596. X    sky->beta = 1. + 2 * h;
  1597. X    sky->omega = pow(lambda, -0.5 * sky->beta);
  1598. X    sky->lambda = lambda;
  1599. X    sky->scale = scale;
  1600. X    sky->cthresh = cthresh;
  1601. X    sky->lthresh = lthresh;
  1602. X    sky->octaves = octaves;
  1603. X    return sky;
  1604. X}
  1605. X
  1606. Xvoid
  1607. XSkyApply(sky, prim, ray, pos, norm, gnorm, surf)
  1608. XSky *sky;
  1609. XGeom *prim;
  1610. XRay *ray;
  1611. XVector *pos, *norm, *gnorm;
  1612. XSurface *surf;
  1613. X{
  1614. X    Float It, maxval;
  1615. X
  1616. X    It = fBm(pos, sky->omega, sky->lambda, sky->octaves);
  1617. X    maxval = 1. / (1. - sky->omega);
  1618. X    /*
  1619. X     * Map from [-maxval,maxval] to [0,1]
  1620. X     */
  1621. X    It = (maxval +  It) * 0.5/maxval;
  1622. X
  1623. X    It = (It - sky->lthresh) / (sky->cthresh - sky->lthresh);
  1624. X    if (It < 0.)
  1625. X        It = 0;
  1626. X    else if (It > 1.)
  1627. X        It = 1;
  1628. X
  1629. X    if (sky->scale != 0.)
  1630. X        It = pow(It, sky->scale);
  1631. X
  1632. X    surf->transp = 1. - It;
  1633. X
  1634. X    ColorScale(It, surf->diff, &surf->diff);
  1635. X    ColorScale(It, surf->amb, &surf->amb);
  1636. X}
  1637. END_OF_FILE
  1638. if test 1656 -ne `wc -c <'libray/libtext/sky.c'`; then
  1639.     echo shar: \"'libray/libtext/sky.c'\" unpacked with wrong size!
  1640. fi
  1641. # end of 'libray/libtext/sky.c'
  1642. fi
  1643. if test -f 'libray/libtext/windy.c' -a "${1}" != "-c" ; then 
  1644.   echo shar: Will not clobber existing file \"'libray/libtext/windy.c'\"
  1645. else
  1646. echo shar: Extracting \"'libray/libtext/windy.c'\" \(1688 characters\)
  1647. sed "s/^X//" >'libray/libtext/windy.c' <<'END_OF_FILE'
  1648. X/*
  1649. X * windy.c
  1650. X *
  1651. X * Copyright (C) 1989, 1991, Craig E. Kolb
  1652. X * All rights reserved.
  1653. X *
  1654. X * This software may be freely copied, modified, and redistributed
  1655. X * provided that this copyright notice is preserved on all copies.
  1656. X *
  1657. X * You may not distribute this software, in whole or in part, as part of
  1658. X * any commercial product without the express consent of the authors.
  1659. X *
  1660. X * There is no warranty or other guarantee of fitness of this software
  1661. X * for any purpose.  It is provided solely "as is".
  1662. X *
  1663. X * $Id: windy.c,v 4.0 91/07/17 14:44:25 kolb Exp Locker: kolb $
  1664. X *
  1665. X * $Log:    windy.c,v $
  1666. X * Revision 4.0  91/07/17  14:44:25  kolb
  1667. X * Initial version.
  1668. X * 
  1669. X */
  1670. X#include "texture.h"
  1671. X#include "windy.h"
  1672. X
  1673. X/*
  1674. X * Create and return a reference to a "windy" texture.
  1675. X */
  1676. XWindyText *
  1677. XWindyCreate(scale, wscale, cscale, bscale, octaves, tscale, hscale, offset)
  1678. XFloat scale, wscale, cscale, bscale, tscale, hscale, offset;
  1679. Xint octaves;
  1680. X{
  1681. X    WindyText *windy;
  1682. X
  1683. X    windy = (WindyText *)Malloc(sizeof(WindyText));
  1684. X    windy->scale = scale;
  1685. X    windy->windscale = wscale;
  1686. X    windy->chaoscale = cscale;
  1687. X    windy->bumpscale = bscale;
  1688. X    windy->tscale = tscale;
  1689. X    windy->hscale = hscale;
  1690. X    windy->offset = offset;
  1691. X    windy->octaves = octaves;
  1692. X    return windy;
  1693. X}
  1694. X
  1695. X/*
  1696. X * Apply a "windy" texture.
  1697. X */
  1698. Xvoid
  1699. XWindyApply(windy, prim, ray, pos, norm, gnorm, surf)
  1700. XWindyText *windy;
  1701. XGeom *prim;
  1702. XRay *ray;
  1703. XVector *pos, *norm, *gnorm;
  1704. XSurface *surf;
  1705. X{
  1706. X    Vector bump;
  1707. X
  1708. X    Windy(pos, windy->windscale, windy->chaoscale, windy->bumpscale,
  1709. X          windy->octaves, windy->tscale, windy->hscale, windy->offset,
  1710. X          &bump);
  1711. X
  1712. X    norm->x += windy->scale * bump.x;
  1713. X    norm->y += windy->scale * bump.y;
  1714. X    norm->z += windy->scale * bump.z;
  1715. X    VecNormalize(norm);
  1716. X}
  1717. END_OF_FILE
  1718. if test 1688 -ne `wc -c <'libray/libtext/windy.c'`; then
  1719.     echo shar: \"'libray/libtext/windy.c'\" unpacked with wrong size!
  1720. fi
  1721. # end of 'libray/libtext/windy.c'
  1722. fi
  1723. if test -f 'libshade/defaults.h' -a "${1}" != "-c" ; then 
  1724.   echo shar: Will not clobber existing file \"'libshade/defaults.h'\"
  1725. else
  1726. echo shar: Extracting \"'libshade/defaults.h'\" \(1637 characters\)
  1727. sed "s/^X//" >'libshade/defaults.h' <<'END_OF_FILE'
  1728. X/*
  1729. X * defaults.h
  1730. X *
  1731. X * Copyright (C) 1989, 1991, Craig E. Kolb
  1732. X * All rights reserved.
  1733. X *
  1734. X * This software may be freely copied, modified, and redistributed
  1735. X * provided that this copyright notice is preserved on all copies.
  1736. X *
  1737. X * You may not distribute this software, in whole or in part, as part of
  1738. X * any commercial product without the express consent of the authors.
  1739. X *
  1740. X * There is no warranty or other guarantee of fitness of this software
  1741. X * for any purpose.  It is provided solely "as is".
  1742. X *
  1743. X * $Id: defaults.h,v 4.0 91/07/17 14:45:18 kolb Exp Locker: kolb $
  1744. X *
  1745. X * $Log:    defaults.h,v $
  1746. X * Revision 4.0  91/07/17  14:45:18  kolb
  1747. X * Initial version.
  1748. X * 
  1749. X */
  1750. X#ifndef DEFAULTS_H
  1751. X#define DEFAULTS_H
  1752. X
  1753. X#define DEFSAMPLES    3    /* sqrt of number of samples */
  1754. X
  1755. X#define XRESOLUTION    512        /* Default screen size (pixels) */
  1756. X#define YRESOLUTION    512
  1757. X#define DEFCUTOFF    0.002        /* Default tree cutoff value */
  1758. X#define MAXDEPTH    5        /* Maximum ray tree depth. */
  1759. X#define HFOV        45        /* Field-of-view */
  1760. X#define EYEX        0        /* Eye position */
  1761. X#define EYEY        -10
  1762. X#define EYEZ        0
  1763. X#define LOOKX        0        /* Look point */
  1764. X#define LOOKY        0
  1765. X#define LOOKZ        0
  1766. X#define UPX        0        /* Up vector */
  1767. X#define UPY        0
  1768. X#define UPZ        1
  1769. X#define GAMMA        1.        /* Default gamma */
  1770. X#define GAUSSIAN    FALSE        /* Use gaussian pixel filter? */
  1771. X#define FILTERWIDTH    1.8        /* Default gaussian filter width */
  1772. X
  1773. X#if defined(LINDA) && !defined(WORKERS)
  1774. X#define WORKERS        4        /* Default # of workers. */
  1775. X#endif
  1776. X
  1777. X#define REPORTFREQ    10        /* Frequency of status report */
  1778. X
  1779. X#define DEFREDCONT    0.2        /* Default contrast threshold values. */
  1780. X#define DEFGREENCONT    0.15
  1781. X#define DEFBLUECONT    0.3
  1782. X
  1783. X#endif /* DEFAULTS_H */
  1784. END_OF_FILE
  1785. if test 1637 -ne `wc -c <'libshade/defaults.h'`; then
  1786.     echo shar: \"'libshade/defaults.h'\" unpacked with wrong size!
  1787. fi
  1788. # end of 'libshade/defaults.h'
  1789. fi
  1790. if test -f 'raypaint/README' -a "${1}" != "-c" ; then 
  1791.   echo shar: Will not clobber existing file \"'raypaint/README'\"
  1792. else
  1793. echo shar: Extracting \"'raypaint/README'\" \(1775 characters\)
  1794. sed "s/^X//" >'raypaint/README' <<'END_OF_FILE'
  1795. XRaypaint reads a rayshade input file and opens a graphics window into
  1796. Xwhich the image is progressively rendered.  Graphics support routines
  1797. Xare provided for X11 and GL (SGI / RS6000).
  1798. X
  1799. XCommand-line arguments to raypaint are identical to rayshade arguments.
  1800. X
  1801. XBy default, raypaint refines areas of the image that it considers
  1802. X"interesting" (largish and contrasty).  The mouse may be used to direct
  1803. Xraypaint to concentrate on particular regions.  Holding down the
  1804. Xleft mouse button causes the indicated region to be single-sampled down
  1805. Xto the pixel level.  The right button causes the region to be supersampled.
  1806. XWhen either button is released, raypaint continues to refine by
  1807. Xeither single-sampling (if the left button was pressed) or supersampling
  1808. X(if the right button was pressed).  If either button is pressed while the
  1809. Xcursor is pointing at a region that has already been resolved to the
  1810. Xpixel-level, raypaint will instead choose its own region to refine.
  1811. X
  1812. XThe middle mouse button may be used to sweep out a rectangular region to
  1813. Xwhich raypaint should restrict its refinement:  Press and hold the middle
  1814. Xmouse button while pointing at one corner of the region on interest,
  1815. Xdrag the cursor to the opposite corner and release the mouse button.
  1816. XNote that no rectangle will be drawn.  Refinement will continue inside
  1817. Xof the indicated region, using whatever sampling
  1818. X
  1819. XWhen every pixel has been sampled, an image file is written.
  1820. X
  1821. XNote that raypaint is intended to be an example application, not a
  1822. Xpolished tool.  You are encouraged to tear apart raypaint to improve
  1823. Xit or build your own application.
  1824. X
  1825. XTo compile, move either xgraphics.c (X11) or glgraphics.c (SGI) to
  1826. Xgraphics.c, edit the Makefile and change GRAPHICSLIB to reflect your
  1827. Xchoice of graphics support, and run make.
  1828. END_OF_FILE
  1829. if test 1775 -ne `wc -c <'raypaint/README'`; then
  1830.     echo shar: \"'raypaint/README'\" unpacked with wrong size!
  1831. fi
  1832. # end of 'raypaint/README'
  1833. fi
  1834. if test -f 'rayview/main.c' -a "${1}" != "-c" ; then 
  1835.   echo shar: Will not clobber existing file \"'rayview/main.c'\"
  1836. else
  1837. echo shar: Extracting \"'rayview/main.c'\" \(1592 characters\)
  1838. sed "s/^X//" >'rayview/main.c' <<'END_OF_FILE'
  1839. X/*
  1840. X * main.c
  1841. X *
  1842. X * Copyright (C) 1989, 1991, Craig E. Kolb
  1843. X * All rights reserved.
  1844. X *
  1845. X * This software may be freely copied, modified, and redistributed
  1846. X * provided that this copyright notice is preserved on all copies.
  1847. X *
  1848. X * You may not distribute this software, in whole or in part, as part of
  1849. X * any commercial product without the express consent of the authors.
  1850. X *
  1851. X * There is no warranty or other guarantee of fitness of this software
  1852. X * for any purpose.  It is provided solely "as is".
  1853. X *
  1854. X * $Id: main.c,v 4.0 91/07/17 14:55:35 kolb Exp Locker: kolb $
  1855. X *
  1856. X * $Log:    main.c,v $
  1857. X * Revision 4.0  91/07/17  14:55:35  kolb
  1858. X * Initial version.
  1859. X * 
  1860. X */
  1861. X
  1862. Xchar rcsid[] = "$Id: main.c,v 4.0 91/07/17 14:55:35 kolb Exp Locker: kolb $";
  1863. X
  1864. X#include "rayshade.h"
  1865. X#include "options.h"
  1866. X#include "stats.h"
  1867. X#include "viewing.h"
  1868. X#include "picture.h"
  1869. X
  1870. X
  1871. Xint
  1872. Xmain(argc, argv)
  1873. Xint argc;
  1874. Xchar **argv;
  1875. X{
  1876. X    Float utime, stime;
  1877. X
  1878. X    /*
  1879. X      * Initialize variables, etc.
  1880. X     */
  1881. X    RSInitialize(argc, argv);
  1882. X    MethodsRegister();
  1883. X
  1884. X    RSStartFrame(0);
  1885. X    /*
  1886. X      * Print more information than we'll ever need to know...
  1887. X     */
  1888. X    if (Options.verbose) {
  1889. X        extern Geom *World;
  1890. X        /* World object info. */
  1891. X        AggregatePrintInfo(World, Stats.fstats);
  1892. X        /* Print info about rendering options and the like. */
  1893. X        RSOptionsList();
  1894. X    }
  1895. X    /*
  1896. X     * Print preprocessing time.
  1897. X     */
  1898. X    RSGetCpuTime(&utime, &stime);
  1899. X    fprintf(Stats.fstats,"Preprocessing time:\t");
  1900. X    fprintf(Stats.fstats,"%2.2fu  %2.2fs\n", utime, stime);
  1901. X    fprintf(Stats.fstats,"Starting trace.\n");
  1902. X    (void)fflush(Stats.fstats);
  1903. X    /*
  1904. X     * Draw the image.
  1905. X     */
  1906. X    Render();
  1907. X    StatsPrint();
  1908. X    return 0;
  1909. X}
  1910. END_OF_FILE
  1911. if test 1592 -ne `wc -c <'rayview/main.c'`; then
  1912.     echo shar: \"'rayview/main.c'\" unpacked with wrong size!
  1913. fi
  1914. # end of 'rayview/main.c'
  1915. fi
  1916. echo shar: End of archive 4 \(of 19\).
  1917. cp /dev/null ark4isdone
  1918. MISSING=""
  1919. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ; do
  1920.     if test ! -f ark${I}isdone ; then
  1921.     MISSING="${MISSING} ${I}"
  1922.     fi
  1923. done
  1924. if test "${MISSING}" = "" ; then
  1925.     echo You have unpacked all 19 archives.
  1926.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1927. else
  1928.     echo You still need to unpack the following archives:
  1929.     echo "        " ${MISSING}
  1930. fi
  1931. ##  End of shell archive.
  1932. exit 0
  1933.  
  1934. exit 0 # Just in case...
  1935.