#! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh 'etc/malloc.sgi' <<'END_OF_FILE' X[ Mike Gigante notes that when rendering exteremely large datasets X (consisting primarily of triangles in his case), one may use the X 'mallopt()' routine on certain machines to improve performance X significantly (to say the least). -- CEK ] X X XFrom mg@godzilla.cgl.rmit.OZ.AU Tue Aug 21 14:35:08 1990 XReceived: from godzilla.cgl.rmit.oz.au by weedeater.math.yale.edu via SMTP; Tue, 21 Aug 90 14:35:08 -0400 XReceived: by godzilla XDate: Wed, 22 Aug 90 05:16:40 EST XFrom: mg@godzilla.cgl.rmit.OZ.AU (Mike Gigante) XMessage-Id: <9008211916.4715@godzilla> XTo: craig@weedeater.math.yale.edu XSubject: malloc stuff XStatus: RO X XCraig, Xwe spoke after the ray tracing sig about malloc stuff. Here is that Xstuff I promised to send you. X X1) include in your main program X2) make the following code the *first* executable statements X X#ifdef sgi X /* X * try to tune the malloc stuff. First thing to note is that most X * allocated blocks (at least for triangles) are less than 200 bytes... X */ X mallopt(M_MXFAST, 200); X /* X * allocate a big chunk at a time - esp since we are going to use LOTS X * of memory! X */ X mallopt(M_BLKSZ, 65536); X /* X * don't try too hard when looking for free'd memory to re-use. This X * avoids the heavy paging penalty we have seen... In fact don't look X * at all! X */ X mallopt(M_MXCHK, 0); X#endif X Xand wow! *HUGE* improvments for large models. Just to remind you, it was Xa difference of 88 min CPU time over 10 hour period (just to read a model) Xvs about 2 minutes cpu/elapsed. Because of the M_MXCHK call, the working Xset was larger but it didn't make much difference.. X XBTW, you should check the 200 bytes in the M_MXFAST call. Make it larger Xthan the common malloc sizes (say for mallocing triangle/poly structs). X XHope this is useful. X XMike Gigante, RMIT END_OF_FILE if test 1812 -ne `wc -c <'etc/malloc.sgi'`; then echo shar: \"'etc/malloc.sgi'\" unpacked with wrong size! fi # end of 'etc/malloc.sgi' fi if test -f 'etc/rsconvert/Makefile.SH' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'etc/rsconvert/Makefile.SH'\" else echo shar: Extracting \"'etc/rsconvert/Makefile.SH'\" \(1615 characters\) sed "s/^X//" >'etc/rsconvert/Makefile.SH' <<'END_OF_FILE' Xcase $CONFIG in X'') X if test ! -f config.sh; then X ln ../config.sh . || \ X ln ../../config.sh . || \ X ln ../../../config.sh . || \ X (echo "Can't find config.sh."; exit 1) X fi X . config.sh X ;; Xesac X: This forces SH files to create target in same directory as SH file. X: This is so that make depend always knows where to find SH derivatives. Xcase "$0" in X*/*) cd `expr X$0 : 'X\(.*\)/'` ;; Xesac Xecho "Extracting etc/rsconvert/Makefile (with variable substitutions)" X: This section of the file will have variable substitutions done on it. X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!. X: Protect any dollar signs and backticks that you do not want interpreted X: by putting a backslash in front. You may delete these comments. X$spitshell >Makefile <>Makefile <<'!NO!SUBS!' XLIBRAYDIR = ../../libray XINCLUDE = -I$(LIBRAYDIR) -I../../ XCFLAGS = $(CCFLAGS) $(INCLUDE) $(OPTIMIZE) XLIBS = XYFLAGS = -d X XCFILES = main.c yacc.c lex.c XOBJS = $(CFILES:.c=.o) XDEPENDSRC = main.c yacc.y lex.l X Xrsconvert: $(OBJS) X $(CC) $(CFLAGS) -o rsconvert $(OBJS) $(LIBS) X Xdepend: X (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \ X $(MKDEP) $(DEPENDSRC) | sed 's/: \.\//: /; /\/usr\/include/d' \ X ) >Makefile.new X cp Makefile Makefile.bak X cp Makefile.new Makefile X rm -f Makefile.new X Xclean: X /bin/rm -f y.tab.h $(OBJS) lex.c X X# DO NOT DELETE THIS LINE X!NO!SUBS! Xchmod 755 Makefile X$eunicefix Makefile END_OF_FILE if test 1615 -ne `wc -c <'etc/rsconvert/Makefile.SH'`; then echo shar: \"'etc/rsconvert/Makefile.SH'\" unpacked with wrong size! fi chmod +x 'etc/rsconvert/Makefile.SH' # end of 'etc/rsconvert/Makefile.SH' fi if test -f 'etc/rsconvert/main.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'etc/rsconvert/main.c'\" else echo shar: Extracting \"'etc/rsconvert/main.c'\" \(1743 characters\) sed "s/^X//" >'etc/rsconvert/main.c' <<'END_OF_FILE' X/* X * main.c X * X * Copyright (C) 1989, 1991, Craig E. Kolb X * All rights reserved. X * X * This software may be freely copied, modified, and redistributed X * provided that this copyright notice is preserved on all copies. X * X * You may not distribute this software, in whole or in part, as part of X * any commercial product without the express consent of the authors. X * X * There is no warranty or other guarantee of fitness of this software X * for any purpose. It is provided solely "as is". X * X * $Id: main.c,v 4.0.1.1 91/11/26 21:11:33 cek Exp Locker: cek $ X * X * $Log: main.c,v $ X * Revision 4.0.1.1 91/11/26 21:11:33 cek X * patch3: Define ENDCAPS for cylinder-capping. X * X * Revision 4.0 91/07/17 14:29:30 kolb X * Initial version. X * X */ X#include X#ifdef SYSV X#include X#endif X#include "libcommon/common.h" X Xextern FILE *yyin; X X#define usage(v) fprintf(stderr,"usage: %s [oldfile]\n",v) X Xmain(argc, argv) Xint argc; Xchar **argv; X{ X if (argc > 2) { X usage(argv[0]); X exit(1); X } X X if (argc == 2) { X yyin = fopen(argv[1], "r"); X if (yyin == (FILE *)NULL) { X fprintf(stderr,"Cannot open %s\n",argv[1]); X exit(2); X } X } else X yyin = stdin; X printf("/* Converted by rsconvert */\n"); X printf("#define ENDCAPS\n"); X yyparse(); X} X Xchar * Xstrsave(s) Xchar *s; X{ X extern voidstar Malloc(); X char *r; X X r = (char *)Malloc(strlen(s) + 1); X strcpy(r, s); X return r; X} X Xvoidstar XMalloc(n) Xunsigned n; X{ X voidstar r; X extern voidstar malloc(); X X r = malloc(n); X if (r == (voidstar)NULL) { X fprintf(stderr,"Out of memory allocating %d bytes.\n"); X exit(1); X } X return r; X} X Xvoidstar XCalloc(nelem, elen) Xunsigned nelem, elen; X{ X voidstar res; X X res = Malloc(nelem*elen); X bzero(res, (int)nelem*elen); X return res; X} END_OF_FILE if test 1743 -ne `wc -c <'etc/rsconvert/main.c'`; then echo shar: \"'etc/rsconvert/main.c'\" unpacked with wrong size! fi # end of 'etc/rsconvert/main.c' fi if test -f 'libray/libcommon/Makefile.SH' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'libray/libcommon/Makefile.SH'\" else echo shar: Extracting \"'libray/libcommon/Makefile.SH'\" \(1605 characters\) sed "s/^X//" >'libray/libcommon/Makefile.SH' <<'END_OF_FILE' Xcase $CONFIG in X'') X if test ! -f config.sh; then X ln ../config.sh . || \ X ln ../../config.sh . || \ X ln ../../../config.sh . || \ X (echo "Can't find config.sh."; exit 1) X fi X . config.sh X ;; Xesac X: This forces SH files to create target in same directory as SH file. X: This is so that make depend always knows where to find SH derivatives. Xcase "$0" in X*/*) cd `expr X$0 : 'X\(.*\)/'` ;; Xesac Xecho "Extracting libcommon/Makefile (with variable substitutions)" X: This section of the file will have variable substitutions done on it. X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!. X: Protect any dollar signs and backticks that you do not want interpreted X: by putting a backslash in front. You may delete these comments. X$spitshell >Makefile <>Makefile <<'!NO!SUBS!' XLIB = ../libray.a XINCLUDE = -I../.. XCFLAGS = $(CCFLAGS) $(INCLUDE) $(OPTIMIZE) XSHELL = /bin/sh X XCFILES = memory.c expr.c transform.c rotate.c sampling.c scale.c translate.c \ X vecmath.c xform.c XOFILES = $(CFILES:.c=.o) X X$(LIB): $(OFILES) X ar cur $(LIB) $(OFILES) X $(RANLIB) $(LIB) X Xclean: X rm -f $(OFILES) X Xdepend: X (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \ X $(MKDEP) $(CFILES) | sed 's/: \.\//: /; /\/usr\/include/d' \ X ) >Makefile.new X cp Makefile Makefile.bak X cp Makefile.new Makefile X rm -f Makefile.new X X# DO NOT DELETE THIS LINE X!NO!SUBS! Xchmod 755 Makefile X$eunicefix Makefile END_OF_FILE if test 1605 -ne `wc -c <'libray/libcommon/Makefile.SH'`; then echo shar: \"'libray/libcommon/Makefile.SH'\" unpacked with wrong size! fi chmod +x 'libray/libcommon/Makefile.SH' # end of 'libray/libcommon/Makefile.SH' fi if test -f 'libray/libcommon/memory.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'libray/libcommon/memory.c'\" else echo shar: Extracting \"'libray/libcommon/memory.c'\" \(1646 characters\) sed "s/^X//" >'libray/libcommon/memory.c' <<'END_OF_FILE' X/* X * memory.c X * X * Copyright (C) 1989, 1991, Craig E. Kolb X * All rights reserved. X * X * This software may be freely copied, modified, and redistributed X * provided that this copyright notice is preserved on all copies. X * X * You may not distribute this software, in whole or in part, as part of X * any commercial product without the express consent of the authors. X * X * There is no warranty or other guarantee of fitness of this software X * for any purpose. It is provided solely "as is". X * X * $Id: memory.c,v 4.0 91/07/17 14:30:57 kolb Exp Locker: kolb $ X * X * $Log: memory.c,v $ X * Revision 4.0 91/07/17 14:30:57 kolb X * Initial version. X * X */ X#ifdef SYSV X#include X#endif X#include "common.h" X Xunsigned long TotalAllocated; X Xvoidstar XMalloc(bytes) Xunsigned bytes; X{ X voidstar res; X X TotalAllocated += bytes; X X res = (voidstar)malloc(bytes); X if (res == (voidstar)NULL) X RLerror(RL_PANIC, X "Out of memory trying to allocate %d bytes.\n",bytes); X return res; X} X Xvoidstar XCalloc(nelem, elen) Xunsigned nelem, elen; X{ X voidstar res; X X res = Malloc(nelem*elen); X bzero(res, (int)nelem*elen); X return res; X} X Xvoid XPrintMemoryStats(fp) XFILE *fp; X{ X fprintf(fp,"Total memory allocated:\t\t%lu bytes\n", X TotalAllocated); X} X X/* X * Allocate space for a string, copy string into space. X */ Xchar * Xstrsave(s) Xchar *s; X{ X char *tmp; X X if (s == (char *)NULL) X return (char *)NULL; X X tmp = (char *)Malloc((unsigned)strlen(s) + 1); X (void)strcpy(tmp, s); X return tmp; X} X X#ifdef MULTIMAX X Xchar * Xshare_calloc(num, siz) Xint num; Xunsigned int siz; X{ X char *res; X X res = share_malloc(num*siz); X bzero(res, num*siz); X return res; X} X#endif END_OF_FILE if test 1646 -ne `wc -c <'libray/libcommon/memory.c'`; then echo shar: \"'libray/libcommon/memory.c'\" unpacked with wrong size! fi # end of 'libray/libcommon/memory.c' fi if test -f 'libray/libcommon/scale.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'libray/libcommon/scale.c'\" else echo shar: Extracting \"'libray/libcommon/scale.c'\" \(1761 characters\) sed "s/^X//" >'libray/libcommon/scale.c' <<'END_OF_FILE' X/* X * scale.c X * X * Copyright (C) 1989, 1991, Craig E. Kolb X * All rights reserved. X * X * This software may be freely copied, modified, and redistributed X * provided that this copyright notice is preserved on all copies. X * X * You may not distribute this software, in whole or in part, as part of X * any commercial product without the express consent of the authors. X * X * There is no warranty or other guarantee of fitness of this software X * for any purpose. It is provided solely "as is". X * X * $Id: scale.c,v 4.0 91/07/17 14:32:08 kolb Exp Locker: kolb $ X * X * $Log: scale.c,v $ X * Revision 4.0 91/07/17 14:32:08 kolb X * Initial version. X * X */ X#include "common.h" X#include "scale.h" X XTransMethods *iScaleMethods; Xvoid ScaleMatrix(); X XScale * XScaleCreate() X{ X Scale *res; X X res = (Scale *)Malloc(sizeof(Scale)); X res->x = res->y = res->z = 1.; X return res; X} X XTransMethods * XScaleMethods() X{ X if (iScaleMethods == (TransMethods *)NULL) { X iScaleMethods = (TransMethods *)Malloc(sizeof(TransMethods)); X iScaleMethods->create = (TransCreateFunc *)ScaleCreate; X iScaleMethods->propagate = ScalePropagate; X } X return iScaleMethods; X} X Xvoid XScalePropagate(scale, trans, itrans) XScale *scale; XRSMatrix *trans, *itrans; X{ X if (equal(scale->x, 0.) || equal(scale->y, 0.) || equal(scale->z, 0.)) X RLerror(RL_PANIC, "Degenerate scale %g %g %g\n", scale->x, scale->y, scale->z); X ScaleMatrix(scale->x, scale->y, scale->z, trans); X /* X * Build the inverse X */ X MatrixInit(itrans); X itrans->matrix[0][0] = 1. / scale->x; X itrans->matrix[1][1] = 1. / scale->y; X itrans->matrix[2][2] = 1. / scale->z; X} X Xvoid XScaleMatrix(x, y, z, mat) XFloat x, y, z; XRSMatrix *mat; X{ X MatrixInit(mat); X mat->matrix[0][0] = x; X mat->matrix[1][1] = y; X mat->matrix[2][2] = z; X} END_OF_FILE if test 1761 -ne `wc -c <'libray/libcommon/scale.c'`; then echo shar: \"'libray/libcommon/scale.c'\" unpacked with wrong size! fi # end of 'libray/libcommon/scale.c' fi if test -f 'libray/libcommon/translate.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'libray/libcommon/translate.c'\" else echo shar: Extracting \"'libray/libcommon/translate.c'\" \(1722 characters\) sed "s/^X//" >'libray/libcommon/translate.c' <<'END_OF_FILE' X/* X * translate.c X * X * Copyright (C) 1989, 1991, Craig E. Kolb X * All rights reserved. X * X * This software may be freely copied, modified, and redistributed X * provided that this copyright notice is preserved on all copies. X * X * You may not distribute this software, in whole or in part, as part of X * any commercial product without the express consent of the authors. X * X * There is no warranty or other guarantee of fitness of this software X * for any purpose. It is provided solely "as is". X * X * $Id: translate.c,v 4.0 91/07/17 14:32:42 kolb Exp Locker: kolb $ X * X * $Log: translate.c,v $ X * Revision 4.0 91/07/17 14:32:42 kolb X * Initial version. X * X */ X#include "common.h" X#include "translate.h" X XTransMethods *iTranslateMethods; Xvoid TranslationMatrix(); X XTranslate * XTranslateCreate() X{ X Translate *res; X X res = (Translate *)Malloc(sizeof(Translate)); X res->x = res->y = res->z = 0.; X return res; X} X XTransMethods * XTranslateMethods() X{ X if (iTranslateMethods == (TransMethods *)NULL) { X iTranslateMethods = (TransMethods *)Malloc(sizeof(TransMethods)); X iTranslateMethods->create = (TransCreateFunc *)TranslateCreate; X iTranslateMethods->propagate = TranslatePropagate; X } X return iTranslateMethods; X} X Xvoid XTranslatePropagate(translate, trans, itrans) XTranslate *translate; XRSMatrix *trans, *itrans; X{ X TranslationMatrix(translate->x, translate->y, translate->z, trans); X /* X * Build the inverse... X */ X MatrixInit(itrans); X itrans->translate.x = -translate->x; X itrans->translate.y = -translate->y; X itrans->translate.z = -translate->z; X} X Xvoid XTranslationMatrix(x, y, z, mat) XFloat x, y, z; XRSMatrix *mat; X{ X MatrixInit(mat); X mat->translate.x = x; X mat->translate.y = y; X mat->translate.z = z; X} END_OF_FILE if test 1722 -ne `wc -c <'libray/libcommon/translate.c'`; then echo shar: \"'libray/libcommon/translate.c'\" unpacked with wrong size! fi # end of 'libray/libcommon/translate.c' fi if test -f 'libray/libimage/Makefile.SH' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'libray/libimage/Makefile.SH'\" else echo shar: Extracting \"'libray/libimage/Makefile.SH'\" \(1548 characters\) sed "s/^X//" >'libray/libimage/Makefile.SH' <<'END_OF_FILE' Xcase $CONFIG in X'') X if test ! -f config.sh; then X ln ../config.sh . || \ X ln ../../config.sh . || \ X ln ../../../config.sh . || \ X (echo "Can't find config.sh."; exit 1) X fi X . config.sh X ;; Xesac X: This forces SH files to create target in same directory as SH file. X: This is so that make depend always knows where to find SH derivatives. Xcase "$0" in X*/*) cd `expr X$0 : 'X\(.*\)/'` ;; Xesac Xecho "Extracting libimage/Makefile (with variable substitutions)" X: This section of the file will have variable substitutions done on it. X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!. X: Protect any dollar signs and backticks that you do not want interpreted X: by putting a backslash in front. You may delete these comments. X$spitshell >Makefile <>Makefile <<'!NO!SUBS!' XLIB = ../libray.a XINCLUDE = -I.. -I../.. $(URTINC) XCFLAGS = $(CCFLAGS) $(INCLUDE) $(OPTIMIZE) XSHELL = /bin/sh X XOFILES = image.o XCFILES = image.c X X X$(LIB): $(OFILES) X ar cur $(LIB) $(OFILES) X $(RANLIB) $(LIB) X Xclean: X rm -f $(OFILES) X Xdepend: X (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \ X $(MKDEP) $(CFILES) | sed 's/: \.\//: /; /\/usr\/include/d' \ X ) >Makefile.new X cp Makefile Makefile.bak X cp Makefile.new Makefile X rm -f Makefile.new X X# DO NOT DELETE THIS LINE X!NO!SUBS! Xchmod 755 Makefile X$eunicefix Makefile END_OF_FILE if test 1548 -ne `wc -c <'libray/libimage/Makefile.SH'`; then echo shar: \"'libray/libimage/Makefile.SH'\" unpacked with wrong size! fi chmod +x 'libray/libimage/Makefile.SH' # end of 'libray/libimage/Makefile.SH' fi if test -f 'libray/liblight/Makefile.SH' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'libray/liblight/Makefile.SH'\" else echo shar: Extracting \"'libray/liblight/Makefile.SH'\" \(1585 characters\) sed "s/^X//" >'libray/liblight/Makefile.SH' <<'END_OF_FILE' Xcase $CONFIG in X'') X if test ! -f config.sh; then X ln ../config.sh . || \ X ln ../../config.sh . || \ X ln ../../../config.sh . || \ X (echo "Can't find config.sh."; exit 1) X fi X . config.sh X ;; Xesac X: This forces SH files to create target in same directory as SH file. X: This is so that make depend always knows where to find SH derivatives. Xcase "$0" in X*/*) cd `expr X$0 : 'X\(.*\)/'` ;; Xesac Xecho "Extracting liblight/Makefile (with variable substitutions)" X: This section of the file will have variable substitutions done on it. X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!. X: Protect any dollar signs and backticks that you do not want interpreted X: by putting a backslash in front. You may delete these comments. X$spitshell >Makefile <>Makefile <<'!NO!SUBS!' XLIB = ../libray.a XINCLUDE = -I.. -I../.. XCFLAGS = $(CCFLAGS) $(INCLUDE) $(OPTIMIZE) XSHELL = /bin/sh X XCFILES = light.c extended.c infinite.c jittered.c point.c shadow.c spot.c XOFILES = $(CFILES:.c=.o) X X$(LIB): $(OFILES) X ar cur $(LIB) $(OFILES) X $(RANLIB) $(LIB) X Xclean: X rm -f $(OFILES) X Xdepend: X (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \ X $(MKDEP) $(CFILES) | sed 's/: \.\//: /; /\/usr\/include/d' \ X ) >Makefile.new X cp Makefile Makefile.bak X cp Makefile.new Makefile X rm -f Makefile.new X X# DO NOT DELETE THIS LINE X!NO!SUBS! Xchmod 755 Makefile X$eunicefix Makefile END_OF_FILE if test 1585 -ne `wc -c <'libray/liblight/Makefile.SH'`; then echo shar: \"'libray/liblight/Makefile.SH'\" unpacked with wrong size! fi chmod +x 'libray/liblight/Makefile.SH' # end of 'libray/liblight/Makefile.SH' fi if test -f 'libray/liblight/infinite.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'libray/liblight/infinite.c'\" else echo shar: Extracting \"'libray/liblight/infinite.c'\" \(1698 characters\) sed "s/^X//" >'libray/liblight/infinite.c' <<'END_OF_FILE' X/* X * infinite.c X * X * Copyright (C) 1989, 1991, Craig E. Kolb X * All rights reserved. X * X * This software may be freely copied, modified, and redistributed X * provided that this copyright notice is preserved on all copies. X * X * You may not distribute this software, in whole or in part, as part of X * any commercial product without the express consent of the authors. X * X * There is no warranty or other guarantee of fitness of this software X * for any purpose. It is provided solely "as is". X * X * $Id: infinite.c,v 4.0 91/07/17 14:34:28 kolb Exp Locker: kolb $ X * X * $Log: infinite.c,v $ X * Revision 4.0 91/07/17 14:34:28 kolb X * Initial version. X * X */ X#include "light.h" X#include "infinite.h" X Xstatic LightMethods *iInfMethods = NULL; X XInfinite * XInfiniteCreate(dir) XVector *dir; X{ X Infinite *inf; X X inf = (Infinite *)share_malloc(sizeof(Infinite)); X inf->dir = *dir; X if (VecNormalize(&inf->dir) == 0.) { X RLerror(RL_ABORT, "Invalid directional light.\n"); X return (Infinite *)NULL; X } X return inf; X} X XLightMethods * XInfiniteMethods() X{ X if (iInfMethods == (LightMethods *)NULL) { X iInfMethods = LightMethodsCreate(); X iInfMethods->intens = InfiniteIntens; X iInfMethods->dir = InfiniteDirection; X } X return iInfMethods; X} X Xint XInfiniteIntens(inf, lcolor, cache, ray, dist, noshadow, color) XInfinite *inf; XColor *lcolor, *color; XShadowCache *cache; XRay *ray; XFloat dist; Xint noshadow; X{ X return !Shadowed(color, lcolor, cache, ray, dist, noshadow); X} X Xvoid XInfiniteDirection(lp, pos, dir, dist) XInfinite *lp; XVector *pos, *dir; XFloat *dist; X{ X *dir = lp->dir; X *dist = FAR_AWAY; X} X XInfiniteMethodRegister(meth) XUserMethodType meth; X{ X if (iInfMethods) X iInfMethods->user = meth; X} END_OF_FILE if test 1698 -ne `wc -c <'libray/liblight/infinite.c'`; then echo shar: \"'libray/liblight/infinite.c'\" unpacked with wrong size! fi # end of 'libray/liblight/infinite.c' fi if test -f 'libray/liblight/point.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'libray/liblight/point.c'\" else echo shar: Extracting \"'libray/liblight/point.c'\" \(1655 characters\) sed "s/^X//" >'libray/liblight/point.c' <<'END_OF_FILE' X/* X * point.c X * X * Copyright (C) 1989, 1991, Craig E. Kolb X * All rights reserved. X * X * This software may be freely copied, modified, and redistributed X * provided that this copyright notice is preserved on all copies. X * X * You may not distribute this software, in whole or in part, as part of X * any commercial product without the express consent of the authors. X * X * There is no warranty or other guarantee of fitness of this software X * for any purpose. It is provided solely "as is". X * X * $Id: point.c,v 4.0 91/07/17 14:35:20 kolb Exp Locker: kolb $ X * X * $Log: point.c,v $ X * Revision 4.0 91/07/17 14:35:20 kolb X * Initial version. X * X */ X#include "light.h" X#include "point.h" X Xstatic LightMethods *iPointMethods = NULL; X XPointlight * XPointCreate(pos) XVector *pos; X{ X Pointlight *p; X X p = (Pointlight *)share_malloc(sizeof(Pointlight)); X p->pos = *pos; X return p; X} X XLightMethods * XPointMethods() X{ X if (iPointMethods == (LightMethods *)NULL) { X iPointMethods = LightMethodsCreate(); X iPointMethods->intens = PointIntens; X iPointMethods->dir = PointDirection; X } X return iPointMethods; X} X Xint XPointIntens(lp, lcolor, cache, ray, dist, noshadow, color) XPointlight *lp; XColor *lcolor, *color; XShadowCache *cache; XRay *ray; XFloat dist; Xint noshadow; X{ X return !Shadowed(color, lcolor, cache, ray, dist, noshadow); X} X Xvoid XPointDirection(lp, pos, dir, dist) XPointlight *lp; XVector *pos, *dir; XFloat *dist; X{ X /* X * Calculate dir from position to center of X * light source. X */ X VecSub(lp->pos, *pos, dir); X *dist = VecNormalize(dir); X} X XPointMethodRegister(meth) XUserMethodType meth; X{ X if (iPointMethods) X iPointMethods->user = meth; X} END_OF_FILE if test 1655 -ne `wc -c <'libray/liblight/point.c'`; then echo shar: \"'libray/liblight/point.c'\" unpacked with wrong size! fi # end of 'libray/liblight/point.c' fi if test -f 'libray/libobj/Makefile.SH' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'libray/libobj/Makefile.SH'\" else echo shar: Extracting \"'libray/libobj/Makefile.SH'\" \(1680 characters\) sed "s/^X//" >'libray/libobj/Makefile.SH' <<'END_OF_FILE' Xcase $CONFIG in X'') X if test ! -f config.sh; then X ln ../config.sh . || \ X ln ../../config.sh . || \ X ln ../../../config.sh . || \ X (echo "Can't find config.sh."; exit 1) X fi X . config.sh X ;; Xesac X: This forces SH files to create target in same directory as SH file. X: This is so that make depend always knows where to find SH derivatives. Xcase "$0" in X*/*) cd `expr X$0 : 'X\(.*\)/'` ;; Xesac Xecho "Extracting libobj/Makefile (with variable substitutions)" X: This section of the file will have variable substitutions done on it. X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!. X: Protect any dollar signs and backticks that you do not want interpreted X: by putting a backslash in front. You may delete these comments. X$spitshell >Makefile <>Makefile <<'!NO!SUBS!' XLIB = ../libray.a XINCLUDE = -I.. -I../.. XCFLAGS = $(CCFLAGS) $(INCLUDE) $(OPTIMIZE) XSHELL = /bin/sh X XCFILES = blob.c bounds.c box.c cone.c csg.c cylinder.c disc.c grid.c \ X hf.c instance.c list.c intersect.c geom.c plane.c poly.c \ X roots.c sphere.c torus.c triangle.c X XOFILES = $(CFILES:.c=.o) X X$(LIB): $(OFILES) X ar cur $(LIB) $(OFILES) X $(RANLIB) $(LIB) X Xclean: X rm -f $(OFILES) X Xdepend: X (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \ X $(MKDEP) $(CFILES) | sed 's/: \.\//: /; /\/usr\/include/d' \ X ) >Makefile.new X cp Makefile Makefile.bak X cp Makefile.new Makefile X rm -f Makefile.new X X# DO NOT DELETE THIS LINE X!NO!SUBS! Xchmod 755 Makefile X$eunicefix Makefile END_OF_FILE if test 1680 -ne `wc -c <'libray/libobj/Makefile.SH'`; then echo shar: \"'libray/libobj/Makefile.SH'\" unpacked with wrong size! fi chmod +x 'libray/libobj/Makefile.SH' # end of 'libray/libobj/Makefile.SH' fi if test -f 'libray/libobj/blob.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'libray/libobj/blob.h'\" else echo shar: Extracting \"'libray/libobj/blob.h'\" \(1574 characters\) sed "s/^X//" >'libray/libobj/blob.h' <<'END_OF_FILE' X/* X * blob.h X * X * Copyright (C) 1990, 1991, Mark Polipec, Craig E. Kolb X * All rights reserved. X * X * This software may be freely copied, modified, and redistributed X * provided that this copyright notice is preserved on all copies. X * X * You may not distribute this software, in whole or in part, as part of X * any commercial product without the express consent of the authors. X * X * There is no warranty or other guarantee of fitness of this software X * for any purpose. It is provided solely "as is". X * X * $Id: blob.h,v 4.0 91/07/17 14:36:12 kolb Exp Locker: kolb $ X * X * $Log: blob.h,v $ X * Revision 4.0 91/07/17 14:36:12 kolb X * Initial version. X * X */ X#ifndef BLOB_H X#define BLOB_H X X#define GeomBlobCreate(t,m,n) GeomCreate((GeomRef)BlobCreate(t,m,n), BlobMethods()) X X#define R_START 1 X#define R_END 0 X X/* X * Blob X */ Xtypedef struct { X Float rs; /* radius */ X Float c4; /* coeefficient */ X Float c2; /* coeefficient */ X Float c0; /* coeefficient */ X Float x; /* x position */ X Float y; /* y position */ X Float z; /* z position */ X} MetaVector; X Xtypedef struct { X int type,pnt; X Float bound; X Float c[5]; X} MetaInt; X Xtypedef struct { X Float T; /* Threshold */ X int num; /* number of points */ X MetaVector *list; /* list of points */ X MetaInt *ilist, **iarr; X X} Blob; X Xtypedef struct MetaList { X MetaVector mvec; X struct MetaList *next; X} MetaList; X Xextern int BlobIntersect(), BlobNormal(); Xextern void BlobBounds(), BlobStats(); Xextern Blob *BlobCreate(); Xextern char *BlobName(); Xextern Methods *BlobMethods(); X X#endif /* BLOB_H */ END_OF_FILE if test 1574 -ne `wc -c <'libray/libobj/blob.h'`; then echo shar: \"'libray/libobj/blob.h'\" unpacked with wrong size! fi # end of 'libray/libobj/blob.h' fi if test -f 'libray/libobj/grid.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'libray/libobj/grid.h'\" else echo shar: Extracting \"'libray/libobj/grid.h'\" \(1751 characters\) sed "s/^X//" >'libray/libobj/grid.h' <<'END_OF_FILE' X/* X * grid.h X * X * Copyright (C) 1989, 1991, Craig E. Kolb X * All rights reserved. X * X * This software may be freely copied, modified, and redistributed X * provided that this copyright notice is preserved on all copies. X * X * You may not distribute this software, in whole or in part, as part of X * any commercial product without the express consent of the authors. X * X * There is no warranty or other guarantee of fitness of this software X * for any purpose. It is provided solely "as is". X * X * $Id: grid.h,v 4.0 91/07/17 14:38:07 kolb Exp Locker: kolb $ X * X * $Log: grid.h,v $ X * Revision 4.0 91/07/17 14:38:07 kolb X * Initial version. X * X */ X#ifndef GRID_H X#define GRID_H X X#define GeomGridCreate(x,y,z) GeomCreate((GeomRef)GridCreate(x,y,z), \ X GridMethods()) X/* X * Convert from voxel number along X/Y/Z to corresponding coordinate. X */ X#define voxel2x(g,x) ((x) * g->voxsize[0] + g->bounds[0][0]) X#define voxel2y(g,y) ((y) * g->voxsize[1] + g->bounds[0][1]) X#define voxel2z(g,z) ((z) * g->voxsize[2] + g->bounds[0][2]) X/* X * And vice-versa. X */ X#define x2voxel(g,x) (((x) - g->bounds[0][0]) / g->voxsize[0]) X#define y2voxel(g,y) (((y) - g->bounds[0][1]) / g->voxsize[1]) X#define z2voxel(g,z) (((z) - g->bounds[0][2]) / g->voxsize[2]) X X/* X * Grid object X */ Xtypedef struct { X short xsize, ysize, zsize; /* # of voxels along each axis */ X Float bounds[2][3]; /* bounding box */ X Float voxsize[3]; /* size of a voxel */ X struct Geom *unbounded, /* unbounded objects */ X *objects; /* all bounded objects */ X struct GeomList ****cells; /* Voxels */ X} Grid; X Xextern char *GridName(); Xextern void *GirdBounds(); Xextern int GridIntersect(), GridConvert(); Xextern Grid *GridCreate(); Xextern Methods *GridMethods(); X X#endif /* GRID_H */ END_OF_FILE if test 1751 -ne `wc -c <'libray/libobj/grid.h'`; then echo shar: \"'libray/libobj/grid.h'\" unpacked with wrong size! fi # end of 'libray/libobj/grid.h' fi if test -f 'libray/libobj/triangle.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'libray/libobj/triangle.h'\" else echo shar: Extracting \"'libray/libobj/triangle.h'\" \(1589 characters\) sed "s/^X//" >'libray/libobj/triangle.h' <<'END_OF_FILE' X/* X * triangle.h X * X * Copyright (C) 1989, 1991, Craig E. Kolb X * All rights reserved. X * X * This software may be freely copied, modified, and redistributed X * provided that this copyright notice is preserved on all copies. X * X * You may not distribute this software, in whole or in part, as part of X * any commercial product without the express consent of the authors. X * X * There is no warranty or other guarantee of fitness of this software X * for any purpose. It is provided solely "as is". X * X * $Id: triangle.h,v 4.0 91/07/17 14:39:43 kolb Exp Locker: kolb $ X * X * $Log: triangle.h,v $ X * Revision 4.0 91/07/17 14:39:43 kolb X * Initial version. X * X */ X#ifndef TRIANGLE_H X#define TRIANGLE_H X X#define FLATTRI 0 X#define PHONGTRI 1 X X#define GeomTriangleCreate(t,a,b,c,d,e,f,g,h,i,s) GeomCreate( \ X (GeomRef)TriangleCreate(t,a,b,c,d,e,f,g,h,i,s), TriangleMethods()) X X/* X * Triangle X */ Xtypedef struct { X Vector nrm, /* triangle normal */ X p[3], /* vertices */ X e[3], /* "edge" vectors (scaled) */ X *vnorm, /* Array of vertex normals */ X *dpdu, *dpdv; /* U and V direction vectors */ X Float d, /* plane constant */ X b[3]; /* Array of barycentric coordinates */ X Vec2d *uv; /* Array of UV coordinates of vertices */ X char index, /* Flag used for shading/intersection test. */ X type; /* type (to detect if phong or flat) */ X} Triangle; X Xextern Triangle *TriangleCreate(); Xextern int TriangleIntersect(), TriangleNormal(); Xextern void TriangleBounds(), TriangleUV(), X TriangleStats(); Xextern Methods *TriangleMethods(); Xchar *TriangleName(); X#endif /* TRIANGLE_H */ END_OF_FILE if test 1589 -ne `wc -c <'libray/libobj/triangle.h'`; then echo shar: \"'libray/libobj/triangle.h'\" unpacked with wrong size! fi # end of 'libray/libobj/triangle.h' fi if test -f 'libray/libsurf/Makefile.SH' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'libray/libsurf/Makefile.SH'\" else echo shar: Extracting \"'libray/libsurf/Makefile.SH'\" \(1577 characters\) sed "s/^X//" >'libray/libsurf/Makefile.SH' <<'END_OF_FILE' Xcase $CONFIG in X'') X if test ! -f config.sh; then X ln ../config.sh . || \ X ln ../../config.sh . || \ X ln ../../../config.sh . || \ X (echo "Can't find config.sh."; exit 1) X fi X . config.sh X ;; Xesac X: This forces SH files to create target in same directory as SH file. X: This is so that make depend always knows where to find SH derivatives. Xcase "$0" in X*/*) cd `expr X$0 : 'X\(.*\)/'` ;; Xesac Xecho "Extracting libsurf/Makefile (with variable substitutions)" X: This section of the file will have variable substitutions done on it. X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!. X: Protect any dollar signs and backticks that you do not want interpreted X: by putting a backslash in front. You may delete these comments. X$spitshell >Makefile <>Makefile <<'!NO!SUBS!' XLIB = ../libray.a XINCLUDE = -I.. -I../.. XCFLAGS = $(INCLUDE) $(CCFLAGS) $(OPTIMIZE) XSHELL = /bin/sh X XCFILES = atmosphere.c fog.c fogdeck.c mist.c surface.c surfshade.c XOFILES = $(CFILES:.c=.o) X X$(LIB): $(OFILES) X ar cur $(LIB) $(OFILES) X $(RANLIB) $(LIB) X Xclean: X rm -f $(OFILES) X Xdepend: X (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \ X $(MKDEP) $(CFILES) | sed 's/: \.\//: /; /\/usr\/include/d' \ X ) >Makefile.new X cp Makefile Makefile.bak X cp Makefile.new Makefile X rm -f Makefile.new X X# DO NOT DELETE THIS LINE X!NO!SUBS! Xchmod 755 Makefile X$eunicefix Makefile END_OF_FILE if test 1577 -ne `wc -c <'libray/libsurf/Makefile.SH'`; then echo shar: \"'libray/libsurf/Makefile.SH'\" unpacked with wrong size! fi chmod +x 'libray/libsurf/Makefile.SH' # end of 'libray/libsurf/Makefile.SH' fi if test -f 'libray/libsurf/fog.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'libray/libsurf/fog.c'\" else echo shar: Extracting \"'libray/libsurf/fog.c'\" \(1675 characters\) sed "s/^X//" >'libray/libsurf/fog.c' <<'END_OF_FILE' X/* X * fog.c X * X * Copyright (C) 1989, 1991, Craig E. Kolb X * All rights reserved. X * X * This software may be freely copied, modified, and redistributed X * provided that this copyright notice is preserved on all copies. X * X * You may not distribute this software, in whole or in part, as part of X * any commercial product without the express consent of the authors. X * X * There is no warranty or other guarantee of fitness of this software X * for any purpose. It is provided solely "as is". X * X * $Id: fog.c,v 4.0 91/07/17 14:40:14 kolb Exp Locker: kolb $ X * X * $Log: fog.c,v $ X * Revision 4.0 91/07/17 14:40:14 kolb X * Initial version. X * X */ X#include "atmosphere.h" X#include "fog.h" X XFog * XFogCreate(color, trans) XColor *color, *trans; X{ X Fog *fog; X static void ComputeFog(); X X fog = (Fog *)Malloc(sizeof(Fog)); X X if (color == (Color *)NULL) X fog->color.r = fog->color.g = fog->color.b = 0.; X else X fog->color = *color; X if (trans == (Color *)NULL) X fog->trans.r = fog->trans.g = fog->trans.b = FAR_AWAY; X else { X fog->trans = *trans; X } X return fog; X} X X/* X * Add fog to the given color. X */ Xvoid XFogApply(fog, ray, pos, dist, color) XFog *fog; XRay *ray; XVector *pos; XFloat dist; XColor *color; X{ X Float atten; X extern Float ExpAtten(); X X atten = ExpAtten(dist, fog->trans.r); X if (fog->trans.r == fog->trans.g && fog->trans.r == fog->trans.b) { X ColorBlend(color, &fog->color, atten, 1. - atten); X return; X } X color->r = atten*color->r + (1. - atten) * fog->color.r; X X atten = ExpAtten(dist, fog->trans.g); X color->g = atten*color->g + (1. - atten) * fog->color.g; X atten = ExpAtten(dist, fog->trans.b); X color->b = atten*color->b + (1. - atten) * fog->color.b; X} END_OF_FILE if test 1675 -ne `wc -c <'libray/libsurf/fog.c'`; then echo shar: \"'libray/libsurf/fog.c'\" unpacked with wrong size! fi # end of 'libray/libsurf/fog.c' fi if test -f 'libray/libsurf/mist.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'libray/libsurf/mist.c'\" else echo shar: Extracting \"'libray/libsurf/mist.c'\" \(1698 characters\) sed "s/^X//" >'libray/libsurf/mist.c' <<'END_OF_FILE' X/* X * mist.c X * X * Copyright (C) 1989, 1991, Craig E. Kolb X * All rights reserved. X * X * This software may be freely copied, modified, and redistributed X * provided that this copyright notice is preserved on all copies. X * X * You may not distribute this software, in whole or in part, as part of X * any commercial product without the express consent of the authors. X * X * There is no warranty or other guarantee of fitness of this software X * for any purpose. It is provided solely "as is". X * X * $Id: mist.c,v 4.0 91/07/17 14:40:42 kolb Exp Locker: kolb $ X * X * $Log: mist.c,v $ X * Revision 4.0 91/07/17 14:40:42 kolb X * Initial version. X * X */ X#include "atmosphere.h" X#include "mist.h" X XMist * XMistCreate(color, trans, zero, scale) XColor *color, *trans; XFloat zero, scale; X{ X Mist *mist; X X mist = (Mist *)Malloc(sizeof(Mist)); X mist->color = *color; X mist->trans = *trans; X mist->zero = zero; X mist->scale = 1. / scale; X return mist; X} X X/* X * Add low-altitude mist to the given color. X */ Xvoid XMistApply(mist, ray, pos, dist, color) XMist *mist; XRay *ray; XVector *pos; XFloat dist; XColor *color; X{ X Float deltaZ, d, atten; X extern Float ExpAtten(); X X deltaZ = mist->scale * (pos->z - ray->pos.z); X if (fabs(deltaZ) > EPSILON) X d = (exp(-ray->pos.z*mist->scale + mist->zero) - X exp(-pos->z*mist->scale + mist->zero)) / deltaZ; X else X d = exp(-pos->z*mist->scale + mist->zero); X X dist *= d; X X atten = ExpAtten(dist, mist->trans.r); X color->r = atten*color->r + (1. - atten)*mist->color.r; X X atten = ExpAtten(dist, mist->trans.g); X color->g = atten*color->g + (1. - atten)*mist->color.g; X X atten = ExpAtten(dist, mist->trans.b); X color->b = atten*color->b + (1. - atten)*mist->color.b; X} END_OF_FILE if test 1698 -ne `wc -c <'libray/libsurf/mist.c'`; then echo shar: \"'libray/libsurf/mist.c'\" unpacked with wrong size! fi # end of 'libray/libsurf/mist.c' fi if test -f 'libray/libtext/Makefile.SH' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'libray/libtext/Makefile.SH'\" else echo shar: Extracting \"'libray/libtext/Makefile.SH'\" \(1683 characters\) sed "s/^X//" >'libray/libtext/Makefile.SH' <<'END_OF_FILE' Xcase $CONFIG in X'') X if test ! -f config.sh; then X ln ../config.sh . || \ X ln ../../config.sh . || \ X ln ../../../config.sh . || \ X (echo "Can't find config.sh."; exit 1) X fi X . config.sh X ;; Xesac X: This forces SH files to create target in same directory as SH file. X: This is so that make depend always knows where to find SH derivatives. Xcase "$0" in X*/*) cd `expr X$0 : 'X\(.*\)/'` ;; Xesac Xecho "Extracting libtext/Makefile (with variable substitutions)" X: This section of the file will have variable substitutions done on it. X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!. X: Protect any dollar signs and backticks that you do not want interpreted X: by putting a backslash in front. You may delete these comments. X$spitshell >Makefile <>Makefile <<'!NO!SUBS!' XLIB = ../libray.a XINCLUDE = -I.. -I../.. XCFLAGS = $(CCFLAGS) $(INCLUDE) $(OPTIMIZE) XSHELL = /bin/sh X XCFILES = blotch.c bump.c checker.c cloud.c fbm.c fbmbump.c gloss.c \ X imagetext.c mapping.c marble.c mount.c noise.c sky.c stripe.c \ X textaux.c texture.c windy.c wood.c X XOFILES = $(CFILES:.c=.o) X X$(LIB): $(OFILES) X ar cur $(LIB) $(OFILES) X $(RANLIB) $(LIB) X Xclean: X rm -f $(OFILES) X Xdepend: X (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \ X $(MKDEP) $(CFILES) | sed 's/: \.\//: /; /\/usr\/include/d' \ X ) >Makefile.new X cp Makefile Makefile.bak X cp Makefile.new Makefile X rm -f Makefile.new X X# DO NOT DELETE THIS LINE X!NO!SUBS! Xchmod 755 Makefile X$eunicefix Makefile END_OF_FILE if test 1683 -ne `wc -c <'libray/libtext/Makefile.SH'`; then echo shar: \"'libray/libtext/Makefile.SH'\" unpacked with wrong size! fi chmod +x 'libray/libtext/Makefile.SH' # end of 'libray/libtext/Makefile.SH' fi if test -f 'libray/libtext/marble.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'libray/libtext/marble.c'\" else echo shar: Extracting \"'libray/libtext/marble.c'\" \(1558 characters\) sed "s/^X//" >'libray/libtext/marble.c' <<'END_OF_FILE' X/* X * marble.c X * X * Copyright (C) 1989, 1991, Craig E. Kolb X * All rights reserved. X * X * This software may be freely copied, modified, and redistributed X * provided that this copyright notice is preserved on all copies. X * X * You may not distribute this software, in whole or in part, as part of X * any commercial product without the express consent of the authors. X * X * There is no warranty or other guarantee of fitness of this software X * for any purpose. It is provided solely "as is". X * X * $Id: marble.c,v 4.0 91/07/17 14:43:06 kolb Exp Locker: kolb $ X * X * $Log: marble.c,v $ X * Revision 4.0 91/07/17 14:43:06 kolb X * Initial version. X * X */ X#include "texture.h" X#include "marble.h" X XMarbleText * XMarbleCreate(mapname) Xchar *mapname; X{ X MarbleText *marble; X X marble = (MarbleText *)Malloc(sizeof(MarbleText)); X if (mapname) X marble->colormap = ColormapRead(mapname); X else X marble->colormap = (Color *)NULL; X return marble; X} X Xvoid XMarbleApply(marble, prim, ray, pos, norm, gnorm, surf) XMarbleText *marble; XGeom *prim; XRay *ray; XVector *pos, *norm, *gnorm; XSurface *surf; X{ X Float val; X int index; X X val = Marble(pos); X if (marble->colormap) { X index = (int)(255. * val); X surf->diff.r *= marble->colormap[index].r; X surf->diff.g *= marble->colormap[index].g; X surf->diff.b *= marble->colormap[index].b; X surf->amb.r *= marble->colormap[index].r; X surf->amb.g *= marble->colormap[index].g; X surf->amb.b *= marble->colormap[index].b; X } else { X ColorScale(val, surf->amb, &surf->amb); X ColorScale(val, surf->diff, &surf->diff); X } X} END_OF_FILE if test 1558 -ne `wc -c <'libray/libtext/marble.c'`; then echo shar: \"'libray/libtext/marble.c'\" unpacked with wrong size! fi # end of 'libray/libtext/marble.c' fi if test -f 'libray/libtext/sky.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'libray/libtext/sky.c'\" else echo shar: Extracting \"'libray/libtext/sky.c'\" \(1656 characters\) sed "s/^X//" >'libray/libtext/sky.c' <<'END_OF_FILE' X/* X * sky.c X * X * Copyright (C) 1989, 1991, Craig E. Kolb X * All rights reserved. X * X * This software may be freely copied, modified, and redistributed X * provided that this copyright notice is preserved on all copies. X * X * You may not distribute this software, in whole or in part, as part of X * any commercial product without the express consent of the authors. X * X * There is no warranty or other guarantee of fitness of this software X * for any purpose. It is provided solely "as is". X * X * $Id: sky.c,v 4.0 91/07/17 14:43:43 kolb Exp Locker: kolb $ X * X * $Log: sky.c,v $ X * Revision 4.0 91/07/17 14:43:43 kolb X * Initial version. X * X */ X#include "texture.h" X#include "sky.h" X XSky * XSkyCreate(scale, h, lambda, octaves, cthresh, lthresh) XFloat h, lambda, scale, cthresh, lthresh; Xint octaves; X{ X Sky *sky; X X sky = (Sky *)Malloc(sizeof(Sky)); X sky->beta = 1. + 2 * h; X sky->omega = pow(lambda, -0.5 * sky->beta); X sky->lambda = lambda; X sky->scale = scale; X sky->cthresh = cthresh; X sky->lthresh = lthresh; X sky->octaves = octaves; X return sky; X} X Xvoid XSkyApply(sky, prim, ray, pos, norm, gnorm, surf) XSky *sky; XGeom *prim; XRay *ray; XVector *pos, *norm, *gnorm; XSurface *surf; X{ X Float It, maxval; X X It = fBm(pos, sky->omega, sky->lambda, sky->octaves); X maxval = 1. / (1. - sky->omega); X /* X * Map from [-maxval,maxval] to [0,1] X */ X It = (maxval + It) * 0.5/maxval; X X It = (It - sky->lthresh) / (sky->cthresh - sky->lthresh); X if (It < 0.) X It = 0; X else if (It > 1.) X It = 1; X X if (sky->scale != 0.) X It = pow(It, sky->scale); X X surf->transp = 1. - It; X X ColorScale(It, surf->diff, &surf->diff); X ColorScale(It, surf->amb, &surf->amb); X} END_OF_FILE if test 1656 -ne `wc -c <'libray/libtext/sky.c'`; then echo shar: \"'libray/libtext/sky.c'\" unpacked with wrong size! fi # end of 'libray/libtext/sky.c' fi if test -f 'libray/libtext/windy.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'libray/libtext/windy.c'\" else echo shar: Extracting \"'libray/libtext/windy.c'\" \(1688 characters\) sed "s/^X//" >'libray/libtext/windy.c' <<'END_OF_FILE' X/* X * windy.c X * X * Copyright (C) 1989, 1991, Craig E. Kolb X * All rights reserved. X * X * This software may be freely copied, modified, and redistributed X * provided that this copyright notice is preserved on all copies. X * X * You may not distribute this software, in whole or in part, as part of X * any commercial product without the express consent of the authors. X * X * There is no warranty or other guarantee of fitness of this software X * for any purpose. It is provided solely "as is". X * X * $Id: windy.c,v 4.0 91/07/17 14:44:25 kolb Exp Locker: kolb $ X * X * $Log: windy.c,v $ X * Revision 4.0 91/07/17 14:44:25 kolb X * Initial version. X * X */ X#include "texture.h" X#include "windy.h" X X/* X * Create and return a reference to a "windy" texture. X */ XWindyText * XWindyCreate(scale, wscale, cscale, bscale, octaves, tscale, hscale, offset) XFloat scale, wscale, cscale, bscale, tscale, hscale, offset; Xint octaves; X{ X WindyText *windy; X X windy = (WindyText *)Malloc(sizeof(WindyText)); X windy->scale = scale; X windy->windscale = wscale; X windy->chaoscale = cscale; X windy->bumpscale = bscale; X windy->tscale = tscale; X windy->hscale = hscale; X windy->offset = offset; X windy->octaves = octaves; X return windy; X} X X/* X * Apply a "windy" texture. X */ Xvoid XWindyApply(windy, prim, ray, pos, norm, gnorm, surf) XWindyText *windy; XGeom *prim; XRay *ray; XVector *pos, *norm, *gnorm; XSurface *surf; X{ X Vector bump; X X Windy(pos, windy->windscale, windy->chaoscale, windy->bumpscale, X windy->octaves, windy->tscale, windy->hscale, windy->offset, X &bump); X X norm->x += windy->scale * bump.x; X norm->y += windy->scale * bump.y; X norm->z += windy->scale * bump.z; X VecNormalize(norm); X} END_OF_FILE if test 1688 -ne `wc -c <'libray/libtext/windy.c'`; then echo shar: \"'libray/libtext/windy.c'\" unpacked with wrong size! fi # end of 'libray/libtext/windy.c' fi if test -f 'libshade/defaults.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'libshade/defaults.h'\" else echo shar: Extracting \"'libshade/defaults.h'\" \(1637 characters\) sed "s/^X//" >'libshade/defaults.h' <<'END_OF_FILE' X/* X * defaults.h X * X * Copyright (C) 1989, 1991, Craig E. Kolb X * All rights reserved. X * X * This software may be freely copied, modified, and redistributed X * provided that this copyright notice is preserved on all copies. X * X * You may not distribute this software, in whole or in part, as part of X * any commercial product without the express consent of the authors. X * X * There is no warranty or other guarantee of fitness of this software X * for any purpose. It is provided solely "as is". X * X * $Id: defaults.h,v 4.0 91/07/17 14:45:18 kolb Exp Locker: kolb $ X * X * $Log: defaults.h,v $ X * Revision 4.0 91/07/17 14:45:18 kolb X * Initial version. X * X */ X#ifndef DEFAULTS_H X#define DEFAULTS_H X X#define DEFSAMPLES 3 /* sqrt of number of samples */ X X#define XRESOLUTION 512 /* Default screen size (pixels) */ X#define YRESOLUTION 512 X#define DEFCUTOFF 0.002 /* Default tree cutoff value */ X#define MAXDEPTH 5 /* Maximum ray tree depth. */ X#define HFOV 45 /* Field-of-view */ X#define EYEX 0 /* Eye position */ X#define EYEY -10 X#define EYEZ 0 X#define LOOKX 0 /* Look point */ X#define LOOKY 0 X#define LOOKZ 0 X#define UPX 0 /* Up vector */ X#define UPY 0 X#define UPZ 1 X#define GAMMA 1. /* Default gamma */ X#define GAUSSIAN FALSE /* Use gaussian pixel filter? */ X#define FILTERWIDTH 1.8 /* Default gaussian filter width */ X X#if defined(LINDA) && !defined(WORKERS) X#define WORKERS 4 /* Default # of workers. */ X#endif X X#define REPORTFREQ 10 /* Frequency of status report */ X X#define DEFREDCONT 0.2 /* Default contrast threshold values. */ X#define DEFGREENCONT 0.15 X#define DEFBLUECONT 0.3 X X#endif /* DEFAULTS_H */ END_OF_FILE if test 1637 -ne `wc -c <'libshade/defaults.h'`; then echo shar: \"'libshade/defaults.h'\" unpacked with wrong size! fi # end of 'libshade/defaults.h' fi if test -f 'rayview/main.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'rayview/main.c'\" else echo shar: Extracting \"'rayview/main.c'\" \(1592 characters\) sed "s/^X//" >'rayview/main.c' <<'END_OF_FILE' X/* X * main.c X * X * Copyright (C) 1989, 1991, Craig E. Kolb X * All rights reserved. X * X * This software may be freely copied, modified, and redistributed X * provided that this copyright notice is preserved on all copies. X * X * You may not distribute this software, in whole or in part, as part of X * any commercial product without the express consent of the authors. X * X * There is no warranty or other guarantee of fitness of this software X * for any purpose. It is provided solely "as is". X * X * $Id: main.c,v 4.0 91/07/17 14:55:35 kolb Exp Locker: kolb $ X * X * $Log: main.c,v $ X * Revision 4.0 91/07/17 14:55:35 kolb X * Initial version. X * X */ X Xchar rcsid[] = "$Id: main.c,v 4.0 91/07/17 14:55:35 kolb Exp Locker: kolb $"; X X#include "rayshade.h" X#include "options.h" X#include "stats.h" X#include "viewing.h" X#include "picture.h" X X Xint Xmain(argc, argv) Xint argc; Xchar **argv; X{ X Float utime, stime; X X /* X * Initialize variables, etc. X */ X RSInitialize(argc, argv); X MethodsRegister(); X X RSStartFrame(0); X /* X * Print more information than we'll ever need to know... X */ X if (Options.verbose) { X extern Geom *World; X /* World object info. */ X AggregatePrintInfo(World, Stats.fstats); X /* Print info about rendering options and the like. */ X RSOptionsList(); X } X /* X * Print preprocessing time. X */ X RSGetCpuTime(&utime, &stime); X fprintf(Stats.fstats,"Preprocessing time:\t"); X fprintf(Stats.fstats,"%2.2fu %2.2fs\n", utime, stime); X fprintf(Stats.fstats,"Starting trace.\n"); X (void)fflush(Stats.fstats); X /* X * Draw the image. X */ X Render(); X StatsPrint(); X return 0; X} END_OF_FILE if test 1592 -ne `wc -c <'rayview/main.c'`; then echo shar: \"'rayview/main.c'\" unpacked with wrong size! fi # end of 'rayview/main.c' fi echo shar: End of archive 4 \(of 19\). cp /dev/null ark4isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 19 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0