Dec 102017
RayShade Raytracer ported to 386 with examples.
File RAYSH386.ZIP from The Programmer’s Corner in
Category Printer + Display Graphics
RayShade Raytracer ported to 386 with examples.
File Name File Size Zip Size Zip Type
DOC 0 0 stored
BUGS 91 84 deflated
CHANGES 1391 721 deflated
COPYRIGH 497 283 deflated
GLOBALS 2012 953 deflated
GUIDE 0 0 stored
ANIMATE.TEX 4262 1637 deflated
CAMERA.TEX 6987 2606 deflated
GUIDE.TEX 1046 504 deflated
HEIGHT.TEX 1889 860 deflated
INTRO.TEX 2663 1248 deflated
LIGHTS.TEX 8506 3053 deflated
OBJECTS.TEX 16885 5706 deflated
OPTIONS.TEX 7078 2325 deflated
PREFACE.TEX 3273 1652 deflated
README 459 304 deflated
RUNNING.TEX 14143 5344 deflated
SURFACES.TEX 10639 3504 deflated
TEXTURE.TEX 13439 4523 deflated
TRANSFOR.TEX 1545 678 deflated
QUICKREF.TXT 9952 3343 deflated
TODO 1303 713 deflated
DOS4GW.EXE 202376 100699 deflated
ETC 0 0 stored
HF 0 0 stored
A2HF.C 1269 561 deflated
A2HF.EXE 48594 28238 deflated
MAKE.BAT 51 51 stored
MOUNT.RAY 807 449 deflated
MOUNT.TXT 119398 34035 deflated
WSTUB.EXE 15108 8919 deflated
MALLOC.SGI 1865 1020 deflated
NFF2SHAD.AWK 3613 1509 deflated
OFF 0 0 stored
BOTTLE1.AOF 422 256 deflated
BOTTLE1.GEO 35398 6233 deflated
ECHIDNA.AOF 260 182 deflated
ECHIDNA.GEO 4771 1742 deflated
GOBLET.AOF 406 223 deflated
GOBLET.GEO 34829 5777 deflated
MAKEOFF.BAT 54 54 stored
OFF2RAY.C 4092 1414 deflated
OFF2RAY.EXE 52896 28985 deflated
TEAPOT.GEO 40960 5938 deflated
WSTUB.EXE 15108 8919 deflated
RSCONVER 0 0 stored
COLOR.H 1282 593 deflated
COMMON.H 2738 1240 deflated
CONFIG.H 6299 2068 deflated
ERROR.H 1463 733 deflated
EXPR.H 1606 753 deflated
LEX.L 4167 1804 deflated
LEXYY.C 28132 6585 deflated
MAIN.C 1839 885 deflated
MAKEFILE.WCC 851 404 deflated
RAY.H 962 528 deflated
RSCONVER.DSK 2529 875 deflated
RSCONVER.EXE 52708 29975 deflated
RSCONVER.LNK 67 51 deflated
RSCONVER.PRJ 5755 1383 deflated
SKELCOM.H 2561 1166 deflated
SKELETON.H 1536 658 deflated
SOLIDS.RAY 987 463 deflated
TRANSFOR.H 1925 840 deflated
VECTOR.H 2391 1013 deflated
WSTUB.EXE 15108 8919 deflated
YACC.Y 14852 3950 deflated
YACC_TAB.C 48759 10623 deflated
YACC_TAB.H 1298 498 deflated
EXAMPLES 0 0 stored
ASHTRAY.DEF 769 303 deflated
ASHTRAY.RAY 483 311 deflated
BALLS.RAY 1036 438 deflated
BLOB.RAY 518 257 deflated
BOXBALL.RAY 1438 459 deflated
COIN.RAY 1122 564 deflated
CSG.RAY 2450 745 deflated
GLASS.DEF 368 178 deflated
GLASS.RAY 549 305 deflated
MTV.RAY 2022 681 deflated
PLANET.MAP 2551 832 deflated
PLANET.RAY 490 302 deflated
POOL.RAY 3946 995 deflated
SOLIDS.RAY 1034 472 deflated
STRIPE.RAY 666 387 deflated
X29.DEF 52666 5749 deflated
X29.RAY 149 114 deflated
X29M.RAY 927 493 deflated
PATCHLEV.H 21 21 stored
RAY.EXE 186153 97522 deflated
RAYVM.BAT 501 307 deflated
README 8202 3700 deflated
README.386 1937 1046 deflated
U.BAT 54 47 deflated

Download File RAYSH386.ZIP Here

Contents of the README file

This directory contains a draft of the Rayshade User's Guide.
It is written using LaTeX macros. To create the corresponding
"dvi" file, run "latex guide" twice from this directory.
The resulting "guide.dvi" file should be fed to your favorite
dvi --> readable-format converter.

If you do not have LaTeX, a postscript version of this document
is available via anonymous ftp from
( in pub/rayshade.4.0/
This is version 4.0 of rayshade, a ray tracing program.
Rayshade reads a multi-line ASCII file describing a scene to be rendered
and produces a Utah Raster Toolkit "RLE" format file containing the
ray traced image.

Rayshade features:

Eleven primitives (blob, box, cone, cylinder, height field,
plane, polygon, sphere, torus, flat- and Phong-shaded triangle)

Aggregate objects

Constructive solid geometry

Point, directional, extended, spot, and quadrilateral light sources

Solid procedural texturing, bump mapping, and
2D "image" texture mapping

Antialiasing through variable-rate "jittered" sampling

Arbitrary linear transformations on objects and texture/bump maps.

Use of uniform spatial subdivision or hierarchy of bounding
volumes to speed rendering

Options to facilitate rendering of stereo pairs

Rudimentary animation support

There are many differences between rayshade versions 3.0 and 4.0. In
particular, the input syntax has changed. Input files created for
version 3.0 must be converted to version 4.0 syntax using the provided
conversion utility, rsconvert. See Doc/Changes for a list of some of
the more important changes.

Rayshade v4.0 has been tested on many 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
easy to port. Be warned that rayshade uses yacc and lex to process input
files. If you do not have lex and yacc, try to get flex and bison from
the Free Software Foundation folks (ftp to Attempts
to port rayshade to 16-bit machines will likely lead to nothing but
a profound sense of frustration.

Rayshade uses a Configure script in order to determine how it should
be compiled. This means that if you're not runing under UNIX, you'll
probably have to create a config.h and edit the Makefiles by hand.
If you create a config.h file and/or Makefiles for use in an non-UNIX
environment, send them to us and we will make it available for use by
others. The prototype config.H file may be of some help.

Normally, rayshade makes use of the Utah Raster toolkit. You are
strongly encouraged to get a copy of the toolkit, as it provides a
host of useful tools for image manipulation and a library for reading/writing
the toolkit's "RLE" format image files. "blurb.urt" is the "blurb" file from
the latest distribution of the toolkit. Also of interest is the
"fbm" library, available from, which
provides additional tools for converting Utah Raster format images
to/from other formats.

If you do not want to or cannot use the Utah Raster toolkit, rayshade
can be configured to create image files using a generic format
identical to that used by Mark VandeWettering's "mtv" ray tracer.

The rayshade distribution consists of two libraries (libray, libshade) and
several applications (rayshade proper, rayview, raypaint) that are
linked against these libraries. To compile, run the Configure script to
generate config.h and the Makefiles, then run "make depend"
followed by "make". If the Configuration script fails, or if
it can't determine a way to generate dependencies, you'll probably
have to edit the Makefiles or extract them from the Makefile.SH scripts
by hand. Don't be overly alarmed if there are a few non-fatal error
messages while running "make depend"

The Doc directory contains a User's Guide in the Guide subdirectory,
as well as a quick-reference sheet and some information that might
be useful in porting or modifying rayshade. To create a formatted
version of the User's Guide, you'll need LaTeX. If you don't have
LaTeX, a postscript version of the Guide is available via anonymous
ftp from (see below).

The etc directory contains miscellaneous goodies, including the source
to a filter to convert rayshade v3.0 input to rayshade 4.0.
The Example directory contains example input files, which may be
used to test rayshade and to familiarize yourself with rayshade's input
syntax. You can also run any one of Eric Haines'
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
modify. It has some nice features which allow you to produce
pretty pictures, but there are countless extensions, modifications,
and improvements which could be made. There are many routines which may be
optimized and many features which could be added. For a list of suggested
improvements and projects see "TODO". You are strongly encouraged to modify
the source code left and right.

While there is currently no documentation for the libraries, it
should be easy for you to add your own primitives, textures, aggregates,
and light sources by looking at the code and sending mail if you get

Additional rayshade goodies are available via anonymous ftp from ( in pub/rayshade.4.0.
If you have contributions of new objects, textures, input files,
configuration files, or images to make, feel free to send us email or
to drop off a copy via ftp in the "incoming" directory on weedeater.

The first version of rayshade was written by Craig Kolb, David P. Dobkin,
and David C. Hoffman during 1987-1988, and was heavily based on an
"introductory" public domain ray tracer written by Roman Kuchkuda.
Rayshade v3.0 was written by Craig Kolb and released in the Fall of 1989.
Rayshade v4.0 was written by Craig Kolb and Rod Bogart during 1990-1991.

Rayshade was made possible by many people who have made suggestions,
fixed bugs, and who have been all-around good sports about the whole thing.

Thanks to Gavin Bell, David Dobkin, Eric Haines, Lefteris Koutsofios,
Ken Musgrave, Przemek Prusinkiewicz, and Allan Snider for their
encouragement, comments, and willingness to be on the Front Lines.

Thanks to Roman Kuchkuda for providing such a solid base upon which
to build.

Special thanks to Robert Skinner for providing the Noise(), DNoise(),
and other texturing functions and allowing them to be redistributed.

Pat Hanrahan's OOGL provided the spirit (if not the letter) of the
modularity of rayshade v4.0. Thanks to Pat and to Mark VandeWettering
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,
Iain Sinclair, 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.

Thanks to Jochen Schwarze for the cubic and quartic root-finding functions.
His code, and a host of other useful routines, can be found in
"Graphics Gems", edited by Andrew Glassner.

Thanks to Benoit Mandelbrot for the support he provided this project.

If you find any bugs, make any useful extensions, have a nice input file,
port rayshade to a new environment, or need assistance understanding a
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 [email protected],
and we'll add you to the rayshade mailing list.

Craig Kolb
Rod Bogart
10 January 1992
[email protected]

Craig Kolb
Computer Science Department
Princeton University
35 Olden St.
Princeton, NJ 08544

 December 10, 2017  Add comments

Leave a Reply