home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-10-19 | 42.8 KB | 1,467 lines |
- Newsgroups: comp.sources.misc
- From: Craig Kolb <rayshade-request@cs.princeton.edu>
- Subject: v23i075: rayshade - A raytracing package for UNIX, Patch01
- Message-ID: <1991Oct19.024232.13698@sparky.imd.sterling.com>
- X-Md4-Signature: 6348dbe45469af21d17e7a255c013923
- Date: Sat, 19 Oct 1991 02:42:32 GMT
- Approved: kent@sparky.imd.sterling.com
-
- Submitted-by: Craig Kolb <rayshade-request@cs.princeton.edu>
- Posting-number: Volume 23, Issue 75
- Archive-name: rayshade/patch01
- Environment: UNIX
- Patch-To: rayshade: Volume 21, Issue 3-22
-
- System: rayshade version 4.0
- Patch #: 1
- Priority: HIGH
-
- Description:
-
- Added "transform" support.
-
- New "window" and "crop" support. Window uses pixel coordinates
- to define a subwindow, crop uses normalized coordinates and
- crops the subwindow.
-
- Rayview supports spotlights and transparency (given appropriate
- hardware.)
-
- Faster bbox transform, a la Jim Arvo.
-
- Fixed view initialization weirdness that lead to bugs
- when rendering animated stereo pairs.
-
- Don't declare free or exit void if stdlib.h is used.
-
- Fixed problems with coincident bbox faces.
-
- Removed a number of floating point comparisons
-
- Corrected help message.
-
- Potential roundoff problem in triangle dPdU code.
-
- CoordSysTransform did not detect up-Z == -1.
-
- Defined MAKE macro in Makefiles for braindamaged machines.
- Note that "make -n" on such machines will almost certainly do
- the wrong thing.
-
- Fixed various typos.
-
-
- Fix: From rn, say "| patch -p -N -d DIR", where DIR is your rayshade source
- directory. Outside of rn, say "cd DIR; patch -p -N <thisarticle".
- If you don't have the patch program, apply the following by hand,
- or get patch (version 2.0, latest patchlevel).
-
- After patching:
-
- *** DO NOTHING--INSTALL PATCH #2 FIRST ***
-
- If patch indicates that patchlevel is the wrong version, you may need
- to apply one or more previous patches, or the patch may already
- have been applied. See the patchlevel.h file to find out what has or
- has not been applied. In any event, don't continue with the patch.
-
- If you are missing previous patches (hah!), they can be obtained
- through anonymous ftp from weedeater.math.yale.edu. Questions
- and problems should be addressed to:
-
- rayshade-request@cs.princeton.edu
-
-
- Index: patchlevel.h
- Prereq: 0
- 1c1
- < #define PATCHLEVEL 0
- ---
- > #define PATCHLEVEL 1
-
- Index: rayview/glmethods.c
- Prereq: 4.0
- *** rayview/glmethods.c.old 1991/07/17 17:38:43
- --- rayview/glmethods.c 1991/10/10 22:45:27
- ***************
- *** 14,22 ****
- * There is no warranty or other guarantee of fitness of this software
- * for any purpose. It is provided solely "as is".
- *
- ! * $Id: glmethods.c,v 4.0 91/07/17 17:38:43 kolb Exp Locker: kolb $
- *
- * $Log: glmethods.c,v $
- * Revision 4.0 91/07/17 17:38:43 kolb
- * Initial version
- *
- --- 14,28 ----
- * There is no warranty or other guarantee of fitness of this software
- * for any purpose. It is provided solely "as is".
- *
- ! * $Id: glmethods.c,v 4.0.1.2 91/10/10 22:45:27 cek Exp $
- *
- * $Log: glmethods.c,v $
- + * Revision 4.0.1.2 91/10/10 22:45:27 cek
- + * patch1: Added spotlight support.
- + *
- + * Revision 4.0.1.1 1991/09/29 15:28:36 cek
- + * patch1: Added support for transparency.
- + *
- * Revision 4.0 91/07/17 17:38:43 kolb
- * Initial version
- *
- ***************
- *** 117,123 ****
- PlaneMethodRegister(GLPlaneDraw);
- PolygonMethodRegister(GLPolygonDraw);
- SphereMethodRegister(GLSphereDraw);
- - /* Have to write sphere routine for RS6000... */
- /*TorusMethodRegister(GLTorusDraw);*/
- TriangleMethodRegister(GLTriangleDraw);
-
- --- 123,128 ----
- ***************
- *** 133,138 ****
- --- 138,152 ----
- short val;
- float tmp;
-
- + /*
- + * We're only sampling the scene once, so we need
- + * not do lots of work to determine exactly what
- + * animated transformations are doing...
- + */
- + Options.samples = 1;
- + SamplingSetOptions(Options.samples, Options.gaussian,
- + Options.filterwidth);
- +
- DrawInit();
- qdevice(ESCKEY);
- qdevice(SPACEKEY);
- ***************
- *** 197,203 ****
- --- 211,219 ----
- doublebuffer();
- }
-
- +
- gconfig();
- + blendfunction(BF_SA, BF_MSA);
- /*
- * Initialize viewing matrix.
- */
- ***************
- *** 329,339 ****
- DIFFUSE, 0, 0, 0,
- SPECULAR, 0, 0, 0,
- SHININESS, 0,
- LMNULL};
- static float *amb = &surfprops[1],
- *diff = &surfprops[5],
- *spec = &surfprops[9],
- ! *shine = &surfprops[13];
-
- static void
- GLPushSurface(surf)
- --- 345,357 ----
- DIFFUSE, 0, 0, 0,
- SPECULAR, 0, 0, 0,
- SHININESS, 0,
- + ALPHA, 1,
- LMNULL};
- static float *amb = &surfprops[1],
- *diff = &surfprops[5],
- *spec = &surfprops[9],
- ! *shine = &surfprops[13],
- ! *alpha = &surfprops[15];
-
- static void
- GLPushSurface(surf)
- ***************
- *** 357,363 ****
- spec[0] = surf->spec.r; spec[1] = surf->spec.g;
- spec[2] = surf->spec.b;
- shine[0] = surf->srexp;
- ! lmdef(DEFMATERIAL, cursurf, 15, surfprops);
- lastsurf = surf;
- }
- lmbind(MATERIAL, cursurf);
- --- 375,383 ----
- spec[0] = surf->spec.r; spec[1] = surf->spec.g;
- spec[2] = surf->spec.b;
- shine[0] = surf->srexp;
- ! *alpha = 1. - surf->transp;
- ! lmdef(DEFMATERIAL, cursurf, sizeof(surfprops)/sizeof(float),
- ! surfprops);
- lastsurf = surf;
- }
- lmbind(MATERIAL, cursurf);
- ***************
- *** 630,639 ****
-
- float lightprops[] = {POSITION, 0., 0., 0., 0.,
- LCOLOR, 0, 0, 0,
- LMNULL};
-
- float *lpos = &lightprops[1],
- ! *lcolor = &lightprops[6];
-
- float lmodel[] = {AMBIENT, 1., 1., 1.,
- ATTENUATION, 1., 0.,
- --- 650,664 ----
-
- float lightprops[] = {POSITION, 0., 0., 0., 0.,
- LCOLOR, 0, 0, 0,
- + SPOTDIRECTION, 0., 0., 0.,
- + SPOTLIGHT, 0., 180.,
- LMNULL};
-
- float *lpos = &lightprops[1],
- ! *lcolor = &lightprops[6],
- ! *spotdir = &lightprops[10],
- ! *spotexp = &lightprops[14],
- ! *spotspread = &lightprops[15];
-
- float lmodel[] = {AMBIENT, 1., 1., 1.,
- ATTENUATION, 1., 0.,
- ***************
- *** 676,686 ****
- lmodel[2] = Options.ambient.g;
- lmodel[3] = Options.ambient.b;
-
- ! #ifdef sgi
- ! lmdef(DEFLMODEL, 1, 14, lmodel);
- ! #else
- ! lmdef(DEFLMODEL, 1, 10, lmodel);
- ! #endif
- lmbind(LMODEL, 1);
- }
-
- --- 701,707 ----
- lmodel[2] = Options.ambient.g;
- lmodel[3] = Options.ambient.b;
-
- ! lmdef(DEFLMODEL, 1, sizeof(lmodel) / sizeof(float), lmodel);
- lmbind(LMODEL, 1);
- }
-
- ***************
- *** 704,710 ****
- lpos[1] = ext->pos.y;
- lpos[2] = ext->pos.z;
- lpos[3] = 1.;
- ! lmdef(DEFLIGHT, curlight++, 10, lightprops);
- }
-
-
- --- 725,732 ----
- lpos[1] = ext->pos.y;
- lpos[2] = ext->pos.z;
- lpos[3] = 1.;
- ! lmdef(DEFLIGHT, curlight++, sizeof(lightprops)/sizeof(float),
- ! lightprops);
- }
-
-
- ***************
- *** 716,722 ****
- lpos[1] = inf->dir.y;
- lpos[2] = inf->dir.z;
- lpos[3] = 0.;
- ! lmdef(DEFLIGHT, curlight++, 10, lightprops);
- }
-
- static void
- --- 738,745 ----
- lpos[1] = inf->dir.y;
- lpos[2] = inf->dir.z;
- lpos[3] = 0.;
- ! lmdef(DEFLIGHT, curlight++, sizeof(lightprops)/sizeof(float),
- ! lightprops);
- }
-
- static void
- ***************
- *** 727,733 ****
- lpos[1] = pt->pos.y;
- lpos[2] = pt->pos.z;
- lpos[3] = 1.;
- ! lmdef(DEFLIGHT, curlight++, 10, lightprops);
- }
-
- static void
- --- 750,757 ----
- lpos[1] = pt->pos.y;
- lpos[2] = pt->pos.z;
- lpos[3] = 1.;
- ! lmdef(DEFLIGHT, curlight++, sizeof(lightprops) / sizeof(float),
- ! lightprops);
- }
-
- static void
- ***************
- *** 734,739 ****
- --- 758,776 ----
- GLSpotLight(spot)
- Spotlight *spot;
- {
- + lpos[0] = spot->pos.x;
- + lpos[1] = spot->pos.y;
- + lpos[2] = spot->pos.z;
- + lpos[3] = 1.;
- + spotdir[0] = spot->pos.x - spot->dir.x;
- + spotdir[1] = spot->pos.y - spot->dir.y;
- + spotdir[2] = spot->pos.z - spot->dir.z;
- + *spotexp = spot->coef;
- + *spotspread = spot->falloff;
- + lmdef(DEFLIGHT, curlight++, sizeof(lightprops) / sizeof(float),
- + lightprops);
- + *spotspread = 180.;
- + *spotexp = 1.;
- }
-
- static float boxfaces[6][4][3] = {
-
- Index: etc/rsconvert/yacc.y
- Prereq: 4.0
- *** etc/rsconvert/yacc.y.old 1991/07/17 17:11:26
- --- etc/rsconvert/yacc.y 1991/09/28 20:44:09
- ***************
- *** 11,17 ****
- /* */
- /* There is no warranty or other guarantee of fitness of this software */
- /* for any purpose. It is provided solely "as is". */
- ! /* $Id: yacc.y,v 4.0 91/07/17 17:11:26 kolb Exp Locker: kolb $ */
- %{
- #include <stdio.h>
- #include "libcommon/common.h"
- --- 11,17 ----
- /* */
- /* There is no warranty or other guarantee of fitness of this software */
- /* for any purpose. It is provided solely "as is". */
- ! /* $Id: yacc.y,v 4.0.1.1 91/09/28 20:44:09 cek Exp Locker: cek $ */
- %{
- #include <stdio.h>
- #include "libcommon/common.h"
- ***************
- *** 399,404 ****
- --- 399,405 ----
- if ($10) {
- WriteString("\ttranslu");
- WriteFloat($10);
- + WriteString("1 1 1");
- WriteFloat($11);
- }
- }
-
- Index: libshade/yacc.y
- Prereq: 4.0
- *** libshade/yacc.y.old 1991/07/17 17:39:39
- --- libshade/yacc.y 1991/10/08 20:40:35
- ***************
- *** 11,17 ****
- /* */
- /* There is no warranty or other guarantee of fitness of this software */
- /* for any purpose. It is provided solely "as is". */
- ! /* $Id: yacc.y,v 4.0 91/07/17 17:39:39 kolb Exp Locker: kolb $ */
- %{
- #include "rayshade.h"
-
- --- 11,17 ----
- /* */
- /* There is no warranty or other guarantee of fitness of this software */
- /* for any purpose. It is provided solely "as is". */
- ! /* $Id: yacc.y,v 4.0.1.2 91/10/08 20:40:35 cek Exp Locker: cek $ */
- %{
- #include "rayshade.h"
-
- ***************
- *** 72,77 ****
- --- 72,78 ----
- #include "libcommon/rotate.h"
- #include "libcommon/scale.h"
- #include "libcommon/translate.h"
- + #include "libcommon/xform.h"
-
- Geom *NewAggregate();
- char yyfilename[BUFSIZ]; /* Input filename */
- ***************
- *** 126,132 ****
- %token tTEXTURE tCHECKER tWOOD tCONTRAST tCUTOFF tCLOUD
- %token tAMBIENT tDIFFUSE tREFLECT tTRANSP tSPECULAR tSPECPOW
- %token tINDEX tATMOSPHERE tNOSHADOW tAREA tTRANSLU tTORUS
- ! %token tEYESEP tSHADOWTRANSP tREPORT tVERBOSE tQUIET tWINDOW tSTRIPE
- %token tMAP tUV tSPHERICAL tCYLINDRICAL tPLANAR
- %token tIMAGE tSMOOTH tCOMPONENT tTEXTSURF tRANGE tTILE tSTARTTIME tFRAMELENGTH
- %token tNAME tFILTER tGAUSS tBODY tSAMPLE tEXTINCT tWINDY tMOUNT
- --- 127,133 ----
- %token tTEXTURE tCHECKER tWOOD tCONTRAST tCUTOFF tCLOUD
- %token tAMBIENT tDIFFUSE tREFLECT tTRANSP tSPECULAR tSPECPOW
- %token tINDEX tATMOSPHERE tNOSHADOW tAREA tTRANSLU tTORUS
- ! %token tEYESEP tSHADOWTRANSP tREPORT tVERBOSE tQUIET tWINDOW tCROP tSTRIPE
- %token tMAP tUV tSPHERICAL tCYLINDRICAL tPLANAR
- %token tIMAGE tSMOOTH tCOMPONENT tTEXTSURF tRANGE tTILE tSTARTTIME tFRAMELENGTH
- %token tNAME tFILTER tGAUSS tBODY tSAMPLE tEXTINCT tWINDY tMOUNT
- ***************
- *** 166,171 ****
- --- 167,173 ----
- | Fov
- | Screen
- | Window
- + | Crop
- | Report
- | Aperture
- | Focaldist
- ***************
- *** 489,494 ****
- --- 491,533 ----
- TransRotateSetTheta($$, $5);
- if (!$$->animated)
- TransPropagate($$);
- + }
- + | tTRANSFORM AnimExpr AnimExpr AnimExpr
- + AnimExpr AnimExpr AnimExpr
- + AnimExpr AnimExpr AnimExpr
- + {
- + $$ = TransXformCreate();
- + TransXformSetX0($$, $2);
- + TransXformSetY0($$, $3);
- + TransXformSetZ0($$, $4);
- + TransXformSetX1($$, $5);
- + TransXformSetY1($$, $6);
- + TransXformSetZ1($$, $7);
- + TransXformSetX2($$, $8);
- + TransXformSetY2($$, $9);
- + TransXformSetZ2($$, $10);
- + if (!$$->animated)
- + TransPropagate($$);
- + }
- + | tTRANSFORM AnimExpr AnimExpr AnimExpr
- + AnimExpr AnimExpr AnimExpr
- + AnimExpr AnimExpr AnimExpr
- + AnimExpr AnimExpr AnimExpr
- + {
- + TransXformSetX0($$, $2);
- + TransXformSetY0($$, $3);
- + TransXformSetZ0($$, $4);
- + TransXformSetX1($$, $5);
- + TransXformSetY1($$, $6);
- + TransXformSetZ1($$, $7);
- + TransXformSetX2($$, $8);
- + TransXformSetY2($$, $9);
- + TransXformSetZ2($$, $10);
- + TransXformSetXt($$, $11);
- + TransXformSetYt($$, $12);
- + TransXformSetZt($$, $13);
- + if (!$$->animated)
- + TransPropagate($$);
- };
- Eyep : tEYEP Vector Transforms
- {
- ***************
- *** 602,616 ****
- }
- }
- ;
- ! Window : tWINDOW Expr Expr Expr Expr
- {
- if (!Options.window_set) {
- ! Options.xmin = $2;
- ! Options.xmax = $3;
- ! Options.ymin = $4;
- ! Options.ymax = $5;
- }
- }
- Report : tREPORT Verbose Quiet IExpr Filename
- {
- if (!Options.freq_set)
- --- 641,666 ----
- }
- }
- ;
- ! Window : tWINDOW IExpr IExpr IExpr IExpr
- {
- if (!Options.window_set) {
- ! Options.window[LOW][X] = $2;
- ! Options.window[HIGH][X] = $3;
- ! Options.window[LOW][Y] = $4;
- ! Options.window[HIGH][Y] = $5;
- }
- }
- + ;
- + Crop : tCROP Expr Expr Expr Expr
- + {
- + if (!Options.crop_set) {
- + Options.crop[LOW][X] = $2;
- + Options.crop[HIGH][X] = $3;
- + Options.crop[LOW][Y] = $4;
- + Options.crop[HIGH][Y] = $5;
- + }
- + }
- + ;
- Report : tREPORT Verbose Quiet IExpr Filename
- {
- if (!Options.freq_set)
- ***************
- *** 667,673 ****
- ;
- Shadowtransp : tSHADOWTRANSP
- {
- ! Options.shadowtransp = TRUE;
- }
- ;
- Light : LightType
- --- 717,723 ----
- ;
- Shadowtransp : tSHADOWTRANSP
- {
- ! Options.shadowtransp = !Options.shadowtransp;
- }
- ;
- Light : LightType
-
- Index: libray/libobj/grid.c
- Prereq: 4.0
- *** libray/libobj/grid.c.old 1991/07/17 14:38:02
- --- libray/libobj/grid.c 1991/10/04 15:55:37
- ***************
- *** 13,21 ****
- * There is no warranty or other guarantee of fitness of this software
- * for any purpose. It is provided solely "as is".
- *
- ! * $Id: grid.c,v 4.0 91/07/17 14:38:02 kolb Exp Locker: kolb $
- *
- * $Log: grid.c,v $
- * Revision 4.0 91/07/17 14:38:02 kolb
- * Initial version.
- *
- --- 13,24 ----
- * There is no warranty or other guarantee of fitness of this software
- * for any purpose. It is provided solely "as is".
- *
- ! * $Id: grid.c,v 4.0.1.1 91/10/04 15:55:37 cek Exp Locker: cek $
- *
- * $Log: grid.c,v $
- + * Revision 4.0.1.1 91/10/04 15:55:37 cek
- + * patch1: Removed straight floating point comparisons.
- + *
- * Revision 4.0 91/07/17 14:38:02 kolb
- * Initial version.
- *
- ***************
- *** 120,132 ****
- x = x2voxel(grid, curpos.x);
- if (x == grid->xsize)
- x--;
- ! if (ray->dir.x < 0.) {
- tMaxX = offset + (voxel2x(grid, x) - curpos.x) / ray->dir.x;
- tDeltaX = grid->voxsize[X] / - ray->dir.x;
- stepX = outX = -1;
- raybounds[LOW][X] = &np.x;
- raybounds[HIGH][X] = &curpos.x;
- ! } else if (ray->dir.x > 0.) {
- tMaxX = offset + (voxel2x(grid, x+1) - curpos.x) / ray->dir.x;
- tDeltaX = grid->voxsize[X] / ray->dir.x;
- stepX = 1;
- --- 123,140 ----
- x = x2voxel(grid, curpos.x);
- if (x == grid->xsize)
- x--;
- ! if (fabs(ray->dir.x) < EPSILON) {
- ! tMaxX = FAR_AWAY;
- ! raybounds[LOW][X] = &curpos.x;
- ! raybounds[HIGH][X] = &np.x;
- ! tDeltaX = 0.;
- ! } else if (ray->dir.x < 0.) {
- tMaxX = offset + (voxel2x(grid, x) - curpos.x) / ray->dir.x;
- tDeltaX = grid->voxsize[X] / - ray->dir.x;
- stepX = outX = -1;
- raybounds[LOW][X] = &np.x;
- raybounds[HIGH][X] = &curpos.x;
- ! } else {
- tMaxX = offset + (voxel2x(grid, x+1) - curpos.x) / ray->dir.x;
- tDeltaX = grid->voxsize[X] / ray->dir.x;
- stepX = 1;
- ***************
- *** 133,155 ****
- outX = grid->xsize;
- raybounds[LOW][X] = &curpos.x;
- raybounds[HIGH][X] = &np.x;
- - } else {
- - tMaxX = FAR_AWAY;
- - raybounds[LOW][X] = &curpos.x;
- - raybounds[HIGH][X] = &np.x;
- - tDeltaX = 0.;
- }
-
- y = y2voxel(grid, curpos.y);
- if (y == grid->ysize)
- y--;
- ! if (ray->dir.y < 0.) {
- tMaxY = offset + (voxel2y(grid, y) - curpos.y) / ray->dir.y;
- tDeltaY = grid->voxsize[Y] / - ray->dir.y;
- stepY = outY = -1;
- raybounds[LOW][Y] = &np.y;
- raybounds[HIGH][Y] = &curpos.y;
- ! } else if (ray->dir.y > 0.) {
- tMaxY = offset + (voxel2y(grid, y+1) - curpos.y) / ray->dir.y;
- tDeltaY = grid->voxsize[Y] / ray->dir.y;
- stepY = 1;
- --- 141,164 ----
- outX = grid->xsize;
- raybounds[LOW][X] = &curpos.x;
- raybounds[HIGH][X] = &np.x;
- }
-
- y = y2voxel(grid, curpos.y);
- if (y == grid->ysize)
- y--;
- !
- ! if (fabs(ray->dir.y) < EPSILON) {
- ! tMaxY = FAR_AWAY;
- ! raybounds[LOW][Y] = &curpos.y;
- ! raybounds[HIGH][Y] = &np.y;
- ! tDeltaY = 0.;
- ! } else if (ray->dir.y < 0.) {
- tMaxY = offset + (voxel2y(grid, y) - curpos.y) / ray->dir.y;
- tDeltaY = grid->voxsize[Y] / - ray->dir.y;
- stepY = outY = -1;
- raybounds[LOW][Y] = &np.y;
- raybounds[HIGH][Y] = &curpos.y;
- ! } else {
- tMaxY = offset + (voxel2y(grid, y+1) - curpos.y) / ray->dir.y;
- tDeltaY = grid->voxsize[Y] / ray->dir.y;
- stepY = 1;
- ***************
- *** 156,178 ****
- outY = grid->ysize;
- raybounds[LOW][Y] = &curpos.y;
- raybounds[HIGH][Y] = &np.y;
- - } else {
- - tMaxY = FAR_AWAY;
- - raybounds[LOW][Y] = &curpos.y;
- - raybounds[HIGH][Y] = &np.y;
- - tDeltaY = 0.;
- }
-
- z = z2voxel(grid, curpos.z);
- if (z == grid->zsize)
- z--;
- ! if (ray->dir.z < 0.) {
- tMaxZ = offset + (voxel2z(grid, z) - curpos.z) / ray->dir.z;
- tDeltaZ = grid->voxsize[Z] / - ray->dir.z;
- stepZ = outZ = -1;
- raybounds[LOW][Z] = &np.z;
- raybounds[HIGH][Z] = &curpos.z;
- ! } else if (ray->dir.z > 0.) {
- tMaxZ = offset + (voxel2z(grid, z+1) - curpos.z) / ray->dir.z;
- tDeltaZ = grid->voxsize[Z] / ray->dir.z;
- stepZ = 1;
- --- 165,187 ----
- outY = grid->ysize;
- raybounds[LOW][Y] = &curpos.y;
- raybounds[HIGH][Y] = &np.y;
- }
-
- z = z2voxel(grid, curpos.z);
- if (z == grid->zsize)
- z--;
- ! if (fabs(ray->dir.z) < EPSILON) {
- ! tMaxZ = FAR_AWAY;
- ! raybounds[LOW][Z] = &curpos.z;
- ! raybounds[HIGH][Z] = &np.z;
- ! tDeltaZ = 0.;
- ! } else if (ray->dir.z < 0.) {
- tMaxZ = offset + (voxel2z(grid, z) - curpos.z) / ray->dir.z;
- tDeltaZ = grid->voxsize[Z] / - ray->dir.z;
- stepZ = outZ = -1;
- raybounds[LOW][Z] = &np.z;
- raybounds[HIGH][Z] = &curpos.z;
- ! } else {
- tMaxZ = offset + (voxel2z(grid, z+1) - curpos.z) / ray->dir.z;
- tDeltaZ = grid->voxsize[Z] / ray->dir.z;
- stepZ = 1;
- ***************
- *** 179,189 ****
- outZ = grid->zsize;
- raybounds[LOW][Z] = &curpos.z;
- raybounds[HIGH][Z] = &np.z;
- - } else {
- - tMaxZ = FAR_AWAY;
- - raybounds[LOW][Z] = &curpos.z;
- - raybounds[HIGH][Z] = &np.z;
- - tDeltaZ = 0.;
- }
-
- VecScale(tDeltaX, ray->dir, &pDeltaX);
- --- 188,193 ----
-
- Index: libshade/viewing.c
- Prereq: 4.0
- *** libshade/viewing.c.old 1991/07/17 14:48:18
- --- libshade/viewing.c 1991/09/29 15:53:09
- ***************
- *** 13,21 ****
- * There is no warranty or other guarantee of fitness of this software
- * for any purpose. It is provided solely "as is".
- *
- ! * $Id: viewing.c,v 4.0 91/07/17 14:48:18 kolb Exp Locker: kolb $
- *
- * $Log: viewing.c,v $
- * Revision 4.0 91/07/17 14:48:18 kolb
- * Initial version.
- *
- --- 13,24 ----
- * There is no warranty or other guarantee of fitness of this software
- * for any purpose. It is provided solely "as is".
- *
- ! * $Id: viewing.c,v 4.0.1.1 91/09/29 15:53:09 cek Exp Locker: cek $
- *
- * $Log: viewing.c,v $
- + * Revision 4.0.1.1 91/09/29 15:53:09 cek
- + * patch1: Added support for window and crop commands.
- + *
- * Revision 4.0 91/07/17 14:48:18 kolb
- * Initial version.
- *
- ***************
- *** 71,76 ****
- --- 74,85 ----
- VecScale(magnitude, Screen.scrni, &Screen.scrnx);
- magnitude = 2.*Camera.lookdist * tan(deg2rad(0.5*Camera.vfov)) /
- Screen.yres;
- + #ifndef URT
- + /*
- + * If using "generic" file format, render top-to-bottom (yick).
- + */
- + magnitude *= -1;
- + #endif
- VecScale(magnitude, Screen.scrnj, &Screen.scrny);
-
- Screen.firstray.x -= 0.5*Screen.yres*Screen.scrny.x +
- ***************
- *** 119,124 ****
- --- 128,138 ----
- void
- ViewingSetup()
- {
- + #define SWAP(a,b) (tmp = (a), (a) = (b), (b) = tmp)
- +
- + Float tmp;
- + int xwidth, ywidth;
- +
- if (Options.stereo && Options.eyesep == UNSET)
- RLerror(RL_PANIC,
- "No eye separation specified for stereo rendering.\n");
- ***************
- *** 137,147 ****
- if (Screen.yres == UNSET)
- Screen.yres = YRESOLUTION;
-
- #ifdef URT
- /*
- ! * If using the URT, we can use the RLE file header to
- ! * determine window size. Screen size (Screen.xres, Screen.yres)
- ! * is determined as usual (from command line or input file).
- */
- if (Options.appending) {
- /*
- --- 151,205 ----
- if (Screen.yres == UNSET)
- Screen.yres = YRESOLUTION;
-
- + /*
- + * The window to be rendered is defined by applying
- + * the crop window to the sub window. The subwindow
- + * is defined using pixel numbers, and must be within
- + * [0, xres -1],[0, yres -1]. The default is the entire
- + * screen. The crop window is specified using normalized
- + * coordinates.
- + */
- +
- + if (!Options.window_set) {
- + /* If no window set, set equal to entire screen. */
- + Options.window[LOW][X] = Options.window[LOW][Y] = 0;
- + Options.window[HIGH][X] = Screen.xres -1;
- + Options.window[HIGH][Y] = Screen.yres -1;
- + }
- +
- + /* Truncate crop window to legal limits. */
- + if (Options.crop[LOW][X] > Options.crop[HIGH][X])
- + SWAP(Options.crop[LOW][X], Options.crop[HIGH][X]);
- + if (Options.crop[LOW][Y] > Options.crop[HIGH][Y])
- + SWAP(Options.crop[LOW][Y], Options.crop[HIGH][Y]);
- + if (Options.crop[LOW][X] < 0.) Options.crop[LOW][X] = 0.;
- + if (Options.crop[LOW][Y] < 0.) Options.crop[LOW][Y] = 0.;
- + if (Options.crop[HIGH][X] > 1.) Options.crop[HIGH][X] = 1.;
- + if (Options.crop[HIGH][Y] > 1.) Options.crop[HIGH][Y] = 1.;
- +
- + xwidth = Options.window[HIGH][X] - Options.window[LOW][X];
- + ywidth = Options.window[HIGH][Y] - Options.window[LOW][Y];
- +
- + /* Compute x and y extents of window to be renered. */
- + Screen.minx = (int)(Options.window[LOW][X] +
- + Options.crop[LOW][X] * xwidth);
- + Screen.maxx = (int)(Options.window[LOW][X] +
- + Options.crop[HIGH][X] * xwidth);
- + Screen.miny = (int)(Options.window[LOW][Y] +
- + Options.crop[LOW][Y] * ywidth);
- + Screen.maxy = (int)(Options.window[LOW][Y] +
- + Options.crop[HIGH][Y] * ywidth);
- +
- #ifdef URT
- /*
- ! * If using the URT, we should use the RLE file header to
- ! * determine cropped window size. Screen size
- ! * (Screen.xres, Screen.yres) is determined from command
- ! * line or input file, as usual.
- ! *
- ! * If the cropped window computed in PictureSetWindow()
- ! * is not equal the cropped window computed above,
- ! * a warning message is issued.
- */
- if (Options.appending) {
- /*
- ***************
- *** 148,165 ****
- * Read image header to determine window size.
- */
- PictureSetWindow();
- - } else {
- - #endif
- - if (Options.xmin < 0.) Options.xmin = 0.;
- - if (Options.ymin < 0.) Options.ymin = 0.;
- - if (Options.xmax > 1.) Options.xmax = 1.;
- - if (Options.xmax > 1.) Options.xmax = 1.;
- -
- - Screen.minx = (int)(Options.xmin * Screen.xres);
- - Screen.maxx = (int)(Options.xmax * Screen.xres -1);
- - Screen.miny = (int)(Options.ymin * Screen.yres);
- - Screen.maxy = (int)(Options.ymax * Screen.yres -1);
- - #ifdef URT
- }
- #endif
-
- --- 206,211 ----
-
- Index: README
- *** README.old 1991/07/17 14:27:21
- --- README 1991/10/10 18:16:26
- ***************
- *** 35,41 ****
- conversion utility, rsconvert. See Doc/Changes for a list of some of
- the more important changes.
-
- ! Rayshade v4.0 has been tested on several different UNIX-based computers,
- including: SGI 4D, IBM RS6000, Sun Sparcstation 1, Sun 3, DECstation,
- Apollo DN10000, NeXT. If your machine has a C compiler, enough memory
- (at least 2Mb), and runs something resembling UNIX, rayshade should be fairly
- --- 35,41 ----
- conversion utility, rsconvert. See Doc/Changes for a list of some of
- the more important changes.
-
- ! Rayshade v4.0 Beta has been tested on several different UNIX-based computers,
- including: SGI 4D, IBM RS6000, Sun Sparcstation 1, Sun 3, DECstation,
- Apollo DN10000, NeXT. If your machine has a C compiler, enough memory
- (at least 2Mb), and runs something resembling UNIX, rayshade should be fairly
- ***************
- *** 90,96 ****
- Standard Procedural Databases through awk using the etc/nff2shade.awk
- script, and then feed the results to rayshade. Note that for several
- of the databases, you will need to tweak the data a bit to achieve
- ! optimal runtimes. See spd2shade.awk for details.
-
- Rayshade was not designed to be, nor is it, the be-all and end-all of
- ray tracers. It was meant to be reasonably fast, portable, and easy to
- --- 90,96 ----
- Standard Procedural Databases through awk using the etc/nff2shade.awk
- script, and then feed the results to rayshade. Note that for several
- of the databases, you will need to tweak the data a bit to achieve
- ! optimal runtimes. See nff2shade.awk for details.
-
- Rayshade was not designed to be, nor is it, the be-all and end-all of
- ray tracers. It was meant to be reasonably fast, portable, and easy to
- ***************
- *** 136,146 ****
- for the 'net tracer' conversations and for the inspiration to do something
- to clean up rayshade.
-
- ! Thanks to Marc Andreessen, Ray Bellis, Dominique Boisvert, William Bouma,
- ! Allen Braunsdorf, Jeff Butterworth, Nick Carriero, Nancy Everson, Tom Friedel,
- ! Robert Funchess, David Gelernter, Mike Gigante, Ed Herderick, John Knuston,
- ! Raphael Manfredi, Lee Moore, Dietmar Saupe, Brian Wyvill,
- ! and everybody else for their bugfixes, suggestions, input files,
- encouragement, and other feedback.
-
- Thanks also to Mark Podlipec for providing the blob and torus objects.
- --- 136,146 ----
- for the 'net tracer' conversations and for the inspiration to do something
- to clean up rayshade.
-
- ! Thanks to Marc Andreessen, Tony Apodaca, Ray Bellis, Dominique Boisvert,
- ! William Bouma, Allen Braunsdorf, Jeff Butterworth, Nick Carriero,
- ! Nancy Everson, Tom Friedel, Robert Funchess, David Gelernter, Mike Gigante,
- ! Ed Herderick, John Knuston, Raphael Manfredi, Lee Moore, Dietmar Saupe,
- ! Brian Wyvill, and everybody else for their bugfixes, suggestions, input files,
- encouragement, and other feedback.
-
- Thanks also to Mark Podlipec for providing the blob and torus objects.
- ***************
- *** 156,179 ****
- particularly braindamaged section of code, please let us know. We can be
- most easily reached by email.
-
- ! Once you start using rayshade, send a message to
- ! rayshade@weedeater.math.yale.edu and you'll be added to the rayshade
- ! mailing list.
-
- Craig Kolb
- Rod Bogart
- ! 17 July 1991
- rayshade@weedeater.math.yale.edu
-
- Craig Kolb
- - Department of Mathematics
- - Yale University
- - 10 Hillhouse Ave.
- - Box 2155 Yale Station
- - New Haven, CT 06520-2155
- - (Until September, 1991)
- -
- Computer Science Department
- Princeton University
- Princeton, NJ 08544
- - (September, 1991 onwards)
- --- 156,172 ----
- particularly braindamaged section of code, please let us know. We can be
- most easily reached by email.
-
- ! Once you start using rayshade, and you'd like to be kept abreast of
- ! changes and extensions, send a message to rayshade-request@cs.princeton.edu,
- ! and we'll add you to the rayshade mailing list.
-
- Craig Kolb
- Rod Bogart
- ! 9 October 1991
- rayshade@weedeater.math.yale.edu
-
- Craig Kolb
- Computer Science Department
- Princeton University
- + 35 Olden St.
- Princeton, NJ 08544
-
- Index: libshade/options.c
- Prereq: 4.0
- *** libshade/options.c.old 1991/07/17 14:46:47
- --- libshade/options.c 1991/10/05 18:23:15
- ***************
- *** 13,21 ****
- * There is no warranty or other guarantee of fitness of this software
- * for any purpose. It is provided solely "as is".
- *
- ! * $Id: options.c,v 4.0 91/07/17 14:46:47 kolb Exp Locker: kolb $
- *
- * $Log: options.c,v $
- * Revision 4.0 91/07/17 14:46:47 kolb
- * Initial version.
- *
- --- 13,25 ----
- * There is no warranty or other guarantee of fitness of this software
- * for any purpose. It is provided solely "as is".
- *
- ! * $Id: options.c,v 4.0.1.1 91/10/05 18:23:15 cek Exp Locker: cek $
- *
- * $Log: options.c,v $
- + * Revision 4.0.1.1 91/10/05 18:23:15 cek
- + * patch1: Changes for new window/crop options.
- + * patch1: Corrected help message.
- + *
- * Revision 4.0 91/07/17 14:46:47 kolb
- * Initial version.
- *
- ***************
- *** 210,239 ****
- OpenStatsFile();
- argv++; argc--;
- break;
- - #ifdef URT
- case 'W':
- ! Options.xmin = atof(argv[1]);
- ! Options.xmax = atof(argv[2]);
- ! Options.ymin = atof(argv[3]);
- ! Options.ymax = atof(argv[4]);
- Options.window_set = TRUE;
- argv += 4; argc -= 4;
- break;
- - #endif
- - #ifdef LINDA
- case 'X':
- ! Options.workers = atoi(argv[1]);
- ! if (Options.workers<0 || Options.workers>17) {
- ! RLerror(RL_PANIC, "%d workers?\n",
- ! Options.workers);
- ! }
- ! argv++; argc--;
- ! break;
- ! case 'w':
- ! Options.verbose_worker =
- ! !Options.verbose_worker;
- break;
- - #endif
- default:
- RLerror(RL_PANIC,"Bad argument: %s\n",argv[0]);
- }
- --- 214,235 ----
- OpenStatsFile();
- argv++; argc--;
- break;
- case 'W':
- ! Options.window[LOW][X] = atoi(argv[1]);
- ! Options.window[HIGH][X] = atoi(argv[3]);
- ! Options.window[LOW][Y] = atoi(argv[3]);
- ! Options.window[HIGH][Y] = atoi(argv[4]);
- Options.window_set = TRUE;
- argv += 4; argc -= 4;
- break;
- case 'X':
- ! Options.crop[LOW][X] = atof(argv[1]);
- ! Options.crop[HIGH][X] = atof(argv[2]);
- ! Options.crop[LOW][Y] = atof(argv[3]);
- ! Options.crop[HIGH][Y] = atof(argv[4]);
- ! Options.crop_set = TRUE;
- ! argv += 4; argc -= 4;
- break;
- default:
- RLerror(RL_PANIC,"Bad argument: %s\n",argv[0]);
- }
- ***************
- *** 304,312 ****
- --- 300,314 ----
- fprintf(stderr,"\t-e \t\t(Write exponential RLE file.)\n");
- #endif
- fprintf(stderr,"\t-F freq\t\t(Set frequency of status report.)\n");
- + fprintf(stderr,"\t-f \t\t(Flip all triangle normals.)\n");
- fprintf(stderr,"\t-G gamma\t(Use given gamma correction exponent.)\n");
- + fprintf(stderr,"\t-g \t\t(Use Gaussian pixel filter.)\n");
- fprintf(stderr,"\t-h \t\t(Print this message.)\n");
- + fprintf(stderr,"\t-j \t\t(Toggle jittered sampling.)\n");
- fprintf(stderr,"\t-l \t\t(Render image for left eye view.)\n");
- + #ifdef URT
- + fprintf(stderr,"\t-m \t\t(Output sample map in alpha channel.)\n");
- + #endif
- fprintf(stderr,"\t-N number\t(Render given number of frames.)\n");
- fprintf(stderr,"\t-n \t\t(Do not render shadows.)\n");
- fprintf(stderr,"\t-O outfile \t(Set output file name.)\n");
- ***************
- *** 321,331 ****
- fprintf(stderr,"\t-T r g b\t(Set contrast threshold (0. - 1.).)\n");
- fprintf(stderr,"\t-V filename \t(Write verbose output to filename.)\n");
- fprintf(stderr,"\t-v \t\t(Verbose output.)\n");
- ! #ifdef URT
- ! fprintf(stderr,"\t-W x y x y \t(Render subwindow.)\n");
- ! #endif
- ! #ifdef LINDA
- ! fprintf(stderr,"\t-X workers\t(Number of workers.)\n");
- ! fprintf(stderr,"\t-w \t\t(Verbose worker output.)\n");
- ! #endif
- }
- --- 323,328 ----
- fprintf(stderr,"\t-T r g b\t(Set contrast threshold (0. - 1.).)\n");
- fprintf(stderr,"\t-V filename \t(Write verbose output to filename.)\n");
- fprintf(stderr,"\t-v \t\t(Verbose output.)\n");
- ! fprintf(stderr,"\t-W x x y y \t(Render subwindow.)\n");
- ! fprintf(stderr,"\t-X l r b t \t(Crop window.)\n");
- }
-
- Index: libray/libobj/bounds.c
- Prereq: 4.0
- *** libray/libobj/bounds.c.old 1991/07/17 14:36:21
- --- libray/libobj/bounds.c 1991/10/05 18:17:29
- ***************
- *** 13,21 ****
- * There is no warranty or other guarantee of fitness of this software
- * for any purpose. It is provided solely "as is".
- *
- ! * $Id: bounds.c,v 4.0 91/07/17 14:36:21 kolb Exp Locker: kolb $
- *
- * $Log: bounds.c,v $
- * Revision 4.0 91/07/17 14:36:21 kolb
- * Initial version.
- *
- --- 13,27 ----
- * There is no warranty or other guarantee of fitness of this software
- * for any purpose. It is provided solely "as is".
- *
- ! * $Id: bounds.c,v 4.0.1.2 91/10/05 18:17:29 cek Exp Locker: cek $
- *
- * $Log: bounds.c,v $
- + * Revision 4.0.1.2 91/10/05 18:17:29 cek
- + * patch1: Faster box transform, a la Jim Arvo.
- + *
- + * Revision 4.0.1.1 1991/09/29 15:42:05 cek
- + * patch1: Justified floating point compare...
- + *
- * Revision 4.0 91/07/17 14:36:21 kolb
- * Initial version.
- *
- ***************
- *** 134,139 ****
- --- 140,149 ----
- } else if (pos < bounds[LOW][Z] || pos > bounds[HIGH][Z])
- return FALSE;
-
- + /*
- + * If tmin == mindist, then there was no "near"
- + * intersection farther than EPSILON away.
- + */
- if (tmin == mindist) {
- if (tmax < *maxdist) {
- *maxdist = tmax;
- ***************
- *** 157,165 ****
- RSMatrix *trans;
- Float objbounds[2][3];
- {
- ! Vector tmp;
- ! Float bounds[2][3];
- ! int x, y, z;
-
- /*
- * Can't (and shouldn't) do anything with unbounded objects.
- --- 167,174 ----
- RSMatrix *trans;
- Float objbounds[2][3];
- {
- ! Float bounds[2][3], a, b;
- ! int i, j;
-
- /*
- * Can't (and shouldn't) do anything with unbounded objects.
- ***************
- *** 166,200 ****
- */
- if (objbounds[LOW][X] > objbounds[HIGH][X])
- return;
- -
- - BoundsInit(bounds);
-
- ! /*
- ! * Find bounding box of transformed corners of bounding box.
- ! */
- ! for (x = 0 ; x < 2; x++) {
- ! for (y = 0; y < 2; y++) {
- ! for (z = 0; z < 2; z++) {
- ! tmp.x = objbounds[x][X];
- ! tmp.y = objbounds[y][Y];
- ! tmp.z = objbounds[z][Z];
- ! PointTransform(&tmp, trans);
- ! if (tmp.x < bounds[LOW][X])
- ! bounds[LOW][X] = tmp.x;
- ! if (tmp.x > bounds[HIGH][X])
- ! bounds[HIGH][X] = tmp.x;
- ! if (tmp.y < bounds[LOW][Y])
- ! bounds[LOW][Y] = tmp.y;
- ! if (tmp.y > bounds[HIGH][Y])
- ! bounds[HIGH][Y] = tmp.y;
- ! if (tmp.z < bounds[LOW][Z])
- ! bounds[LOW][Z] = tmp.z;
- ! if (tmp.z > bounds[HIGH][Z])
- ! bounds[HIGH][Z] = tmp.z;
- }
- }
- }
- -
- BoundsCopy(bounds, objbounds);
- }
-
- --- 175,198 ----
- */
- if (objbounds[LOW][X] > objbounds[HIGH][X])
- return;
-
- ! bounds[LOW][X] = bounds[HIGH][X] = trans->translate.x;
- ! bounds[LOW][Y] = bounds[HIGH][Y] = trans->translate.y;
- ! bounds[LOW][Z] = bounds[HIGH][Z] = trans->translate.z;
- !
- ! for (i = 0; i < 3; i++) {
- ! for (j = 0; j < 3; j++) {
- ! a = trans->matrix[j][i] * objbounds[LOW][j];
- ! b = trans->matrix[j][i] * objbounds[HIGH][j];
- ! if (a < b) {
- ! bounds[LOW][i] += a;
- ! bounds[HIGH][i] += b;
- ! } else {
- ! bounds[LOW][i] += b;
- ! bounds[HIGH][i] += a;
- }
- }
- }
- BoundsCopy(bounds, objbounds);
- }
-
-
- Index: Doc/quickref.txt
- *** Doc/quickref.txt.old 1991/07/17 14:25:15
- --- Doc/quickref.txt 1991/10/05 18:00:35
- ***************
- *** 40,46 ****
- -r Right eye view -S samples Use Samples^2 samples
- -s Toggle shadow caching -T r g b Contrast threshold
- -V filename Verbose file output -v Verbose output
- ! -W lx ly hx hy Render subwindow
- -------------------------------------------------------------------------------
-
- File: /* Input file consists of...*/
- --- 40,46 ----
- -r Right eye view -S samples Use Samples^2 samples
- -s Toggle shadow caching -T r g b Contrast threshold
- -V filename Verbose file output -v Verbose output
- ! -W lx hx ly hy Render subwindow -X l r b t Crop window
- -------------------------------------------------------------------------------
-
- File: /* Input file consists of...*/
- ***************
- *** 70,76 ****
- shutter Speed /* Shutter speed (0 --> no blur) */
- framelength Length /* Length of a singelf frame (1) */
- screen Xsize Ysize /* Screen size */
- ! window Xmin Ymin Xmax Ymax /* Window (0 0 xsize-1 ysize-1) */
- eyesep Separation /* eye separation (0) */
-
- SurfDef: /* Give a name to a set of surface attributes. */
- --- 70,77 ----
- shutter Speed /* Shutter speed (0 --> no blur) */
- framelength Length /* Length of a singelf frame (1) */
- screen Xsize Ysize /* Screen size */
- ! window Xmin Xmax Ymin Ymax /* Window (0 xsize-1 0 ysize-1) */
- ! crop left right bot top /* Crop window (0 1 0 1) */
- eyesep Separation /* eye separation (0) */
-
- SurfDef: /* Give a name to a set of surface attributes. */
- ***************
- *** 199,205 ****
- Mapping:
- map uv
- map cylindrical [Xorigin Yorigin Zorigin Xup Yup Zup Xu Yu Zu]
- ! map linear [Xorigin Yorigin Zorigin Xv Yv Zv Xu Yu Zu]
- map spherical [Xorigin Yorigin Zorigin Xup Yup Zup Xu Yu Zu]
-
- Light:
- --- 200,206 ----
- Mapping:
- map uv
- map cylindrical [Xorigin Yorigin Zorigin Xup Yup Zup Xu Yu Zu]
- ! map planar [Xorigin Yorigin Zorigin Xv Yv Zv Xu Yu Zu]
- map spherical [Xorigin Yorigin Zorigin Xup Yup Zup Xu Yu Zu]
-
- Light:
-
- Index: libshade/symtab.c
- Prereq: 4.0
- *** libshade/symtab.c.old 1991/07/17 14:48:02
- --- libshade/symtab.c 1991/10/05 18:24:29
- ***************
- *** 13,21 ****
- * There is no warranty or other guarantee of fitness of this software
- * for any purpose. It is provided solely "as is".
- *
- ! * $Id: symtab.c,v 4.0 91/07/17 14:48:02 kolb Exp Locker: kolb $
- *
- * $Log: symtab.c,v $
- * Revision 4.0 91/07/17 14:48:02 kolb
- * Initial version.
- *
- --- 13,24 ----
- * There is no warranty or other guarantee of fitness of this software
- * for any purpose. It is provided solely "as is".
- *
- ! * $Id: symtab.c,v 4.0.1.1 91/10/05 18:24:29 cek Exp Locker: cek $
- *
- * $Log: symtab.c,v $
- + * Revision 4.0.1.1 91/10/05 18:24:29 cek
- + * patch1: Added casts for builtin functions.
- + *
- * Revision 4.0 91/07/17 14:48:02 kolb
- * Initial version.
- *
- ***************
- *** 29,42 ****
- {"pi", 3.141592, NULL, FLOAT_EXPR, FALSE, 0},
- {"dtor", 0.017453, NULL, FLOAT_EXPR, FALSE, 0},
- {"rtod", 57.29578, NULL, FLOAT_EXPR, FALSE, 0},
- ! {"cos", 0.0, cos, BUILTIN_EXPR, FALSE, 1},
- ! {"sin", 0.0, sin, BUILTIN_EXPR, FALSE, 1},
- ! {"tan", 0.0, tan, BUILTIN_EXPR, FALSE, 1},
- ! {"sqrt", 0.0, sqrt, BUILTIN_EXPR, FALSE, 1},
- ! {"acos", 0.0, acos, BUILTIN_EXPR, FALSE, 1},
- ! {"asin", 0.0, asin, BUILTIN_EXPR, FALSE, 1},
- ! {"atan", 0.0, atan, BUILTIN_EXPR, FALSE, 1},
- ! {"hypot", 0.0, hypot, BUILTIN_EXPR, FALSE, 2},
- {"time", 0.0, NULL, FLOAT_EXPR, TRUE, 0},
- {"frame", 0.0, NULL, FLOAT_EXPR, TRUE, 0},
- {"linear", 0.0, LinearTime, BUILTIN_EXPR, TRUE, 4},
- --- 32,45 ----
- {"pi", 3.141592, NULL, FLOAT_EXPR, FALSE, 0},
- {"dtor", 0.017453, NULL, FLOAT_EXPR, FALSE, 0},
- {"rtod", 57.29578, NULL, FLOAT_EXPR, FALSE, 0},
- ! {"cos", 0.0, (Float (*)())cos, BUILTIN_EXPR, FALSE, 1},
- ! {"sin", 0.0, (Float (*)())sin, BUILTIN_EXPR, FALSE, 1},
- ! {"tan", 0.0, (Float (*)())tan, BUILTIN_EXPR, FALSE, 1},
- ! {"sqrt", 0.0, (Float (*)())sqrt, BUILTIN_EXPR, FALSE, 1},
- ! {"acos", 0.0, (Float (*)())acos, BUILTIN_EXPR, FALSE, 1},
- ! {"asin", 0.0, (Float (*)())asin, BUILTIN_EXPR, FALSE, 1},
- ! {"atan", 0.0, (Float (*)())atan, BUILTIN_EXPR, FALSE, 1},
- ! {"hypot", 0.0, (Float (*)())hypot, BUILTIN_EXPR, FALSE, 2},
- {"time", 0.0, NULL, FLOAT_EXPR, TRUE, 0},
- {"frame", 0.0, NULL, FLOAT_EXPR, TRUE, 0},
- {"linear", 0.0, LinearTime, BUILTIN_EXPR, TRUE, 4},
-
- Index: Doc/Guide/running.tex
- *** Doc/Guide/running.tex.old 1991/07/17 15:46:02
- --- Doc/Guide/running.tex 1991/10/05 18:02:29
- ***************
- *** 153,171 ****
- the windows into a final image.
-
- \begin{defkey}{window}{{\em minx maxx miny maxy}}
- ! Render the image in the given screen subwindow,
- ! specified in normalized units.
- \end{defkey}
- The window must be properly
- contained within the screen, i.e., {\em minx} and {\em miny} must
- be greater than or equal to zero, while {\em maxx} and
- ! {\em maxy} must be less than or equal to one.
- ! The {\em mtv} image file format does not support windows. The
- ! Utah Raster tool
- {\em rlecomp\/} is useful for reconstructing the full image from
- sub-images.
- By default, the window
- ! is equal to ($0., 1., 0, 1$), or the entire screen.
-
- {\em Gamma correction} may also be applied to the three output color
- channels. See Appendix A for more details.
- --- 153,184 ----
- the windows into a final image.
-
- \begin{defkey}{window}{{\em minx maxx miny maxy}}
- ! Render the image in the given window.
- \end{defkey}
- The window must be properly
- contained within the screen, i.e., {\em minx} and {\em miny} must
- be greater than or equal to zero, while {\em maxx} and
- ! {\em maxy} must be less than {\em xsize} and {\em ysize}, respectively.
- ! The Utah Raster tool
- {\em rlecomp\/} is useful for reconstructing the full image from
- sub-images.
- By default, the window
- ! is equivalent to the entire screen.
- !
- ! It is also convenient to be able to render a small portion
- ! of the window by specifying a subregion using normalized coordinates.
- !
- ! \begin{defkey}{crop}{{\em left right bottom top}}
- ! Crop the rendering window.
- ! \end{defkey}
- ! The rendering window is cropped by rendering the screen
- ! area that falls within $minx + left(maxx - minx)$ and
- ! $minx + right(maxx - minx)$ in the $X$ direction, and similarly
- ! for the $Y$ direction.
- ! {\em Left} and {\em bottom} must be greater than or equal to zero.
- ! {\em Right} and {\em top} must be less than or equal to one.
- ! If {\em left} is greater than {\em right}, the two values are
- ! swapped, and similarly for {\em bottom} and {\em top}.
-
- {\em Gamma correction} may also be applied to the three output color
- channels. See Appendix A for more details.
-
- Index: libray/libcommon/rotate.c
- Prereq: 4.0
- *** libray/libcommon/rotate.c.old 1991/07/17 14:31:18
- --- libray/libcommon/rotate.c 1991/09/29 15:35:38
- ***************
- *** 13,21 ****
- * There is no warranty or other guarantee of fitness of this software
- * for any purpose. It is provided solely "as is".
- *
- ! * $Id: rotate.c,v 4.0 91/07/17 14:31:18 kolb Exp Locker: kolb $
- *
- * $Log: rotate.c,v $
- * Revision 4.0 91/07/17 14:31:18 kolb
- * Initial version.
- *
- --- 13,24 ----
- * There is no warranty or other guarantee of fitness of this software
- * for any purpose. It is provided solely "as is".
- *
- ! * $Id: rotate.c,v 4.0.1.1 91/09/29 15:35:38 cek Exp Locker: cek $
- *
- * $Log: rotate.c,v $
- + * Revision 4.0.1.1 91/09/29 15:35:38 cek
- + * patch1: Added comments.
- + *
- * Revision 4.0 91/07/17 14:31:18 kolb
- * Initial version.
- *
- ***************
- *** 26,31 ****
- --- 29,37 ----
- TransMethods *iRotateMethods;
- void RotationMatrix();
-
- + /*
- + * Create and return reference to Rotate structure.
- + */
- Rotate *
- RotateCreate()
- {
- ***************
- *** 37,42 ****
- --- 43,52 ----
- return res;
- }
-
- + /*
- + * Return a pointer to collection of methods for the
- + * Rotate transformation.
- + */
- TransMethods *
- RotateMethods()
- {
- ***************
- *** 48,53 ****
- --- 58,68 ----
- return iRotateMethods;
- }
-
- + /*
- + * Given a Rotate structure and forward and inverse transformations,
- + * propagate the information in the Rotate structure to the
- + * transformations.
- + */
- void
- RotatePropagate(rotate, trans, itrans)
- Rotate *rotate;
- ***************
- *** 62,67 ****
- --- 77,86 ----
- MatrixInvert(trans, itrans);
- }
-
- + /*
- + * Initialize a rotation matrix given an axis of rotation and an
- + * angle. Right-handed rotation is applied.
- + */
- void
- RotationMatrix(x, y, z, theta, trans)
- Float x, y, z, theta;
-
- *** End of Patch 1 ***
-
- exit 0 # Just in case...
- --
- Kent Landfield INTERNET: kent@sparky.IMD.Sterling.COM
- Sterling Software, IMD UUCP: uunet!sparky!kent
- Phone: (402) 291-8300 FAX: (402) 291-4362
- Please send comp.sources.misc-related mail to kent@uunet.uu.net.
-