POLY3D-R - 3d polygonal rendering program
BECAUSE POLY3D-R IS LICENSED FREE OF CHARGE, I PROVIDE ABSOLUTELY NO
WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING, I GERSHON ELBER PROVIDE POLY3D-R PROGRAM "AS IS"
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
PROGRAM IS WITH YOU. SHOULD THE POLY3D-R PROGRAM PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL GERSHON ELBER,
BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES,
OR OTHER SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR A
FAILURE OF THE PROGRAM TO OPERATE WITH PROGRAMS NOT DISTRIBUTED BY GERSHON
ELBER) THE PROGRAM, EVEN IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY.
A program to render a given polygonal model into GIF image file format,
using cosine shading approximation, and flat/Gouraud interpolation. The
program does 4 passes over the input:
1. Process the input (parsing.)
2. Prepare the polygons by sorting them by their Y after mapping then into
3. Evaluate colors for vertices (using polygon normals if flat shading, or
by averaging normals for Gouraud shading).
4. Scan the data by scan line basis and dump out image.
This programs can handle CONVEX polygons only. See poly3d.doc,
Appendix A, for exact text format definition. From irit given object O,
issue the command 'O = convex(O);' to make sure object has convex polygons
only before dumping it out.
poly3d-r [-a Ambient] [-c N] [-l X Y Z] [-2] [-m] [-s Xsize Ysize] [-g] [-b]
[-S n] [-M Mask] [-o Objects...] [-v ViewFile] [-z] DFiles > Image.GIF
-a Ambient : Sets the ambient intensity (must be in [0..1] range).
-c N : number of bits per pixel N (must be in [1..8] range).
-l X Y Z : specify the light source normal direction. This vector does not
to be unit vector.
-2 : Force 2 light sources at opposite directions as selected via [-l]. This
may be useful for models that has no plane specified (i.e. model has no
PLANE attribute for its polygons), as the program guess the equation from
the points themselves, and which can be to the opposite direction.
-m : More - give some more information on the data file(s) parsed.
-s Xsize Ysize : specify image dimensions. As the models created by IRIT
or DrawFn3D are mapped to a unified domain (X::[-1..1], Y::[-1..1]) by the
viewing matrix (see [-v]), image must be scaled up. The scaling up factor
is MIN(Xsize, Ysize), which guarantee nothing of the original image will be
-b : Delete back facing polygons. If the scene contains objects with complete
boundary (such as the ones IRIT solid modeler generates), the back facing
polygons can be deleted. This would not change the image, but will speed
up the process at about %15. Using this option for non complete boundary
object and/or objects with polygons with no PLANE specified (such as the
ones DrawFn3D generates) would almost definitely create wrong image.
-g : Use Gouraud shading interpolation (flat shading is used by default).
This is somewhat slower, but gives nicer results.
-S n : sub sample, and used box filter to filter the image, using n as
grid side of n by n. This obviously make things slower, but guess what -
it looks much better.
-M Mask : Create a new GIF file named Mask that is a binary image set to 1
at any pixel covered by one of the objects or 0 otherwise. As a color of
an object can become equal to the background at some point, there is no
why to find whether pixel is background or an object in the background
color. The Mask can be used instead. This Mask can be used when combining
images (such as GifComp utility in the Gif_Lib).
-o Object(s) : Objects to display (all by default). Object is the name as
appears after the OBJECT key word the data files
(do 'grep OBJECT datafile'...).
-v ViewFile : View file - file of the view matrix transformation
-z : Print version number and current defaults.
The image is dumped to stdout as a GIF image which can be redirected to a
file or to be piped to any program that reads GIF images from stdin.
The program can be configured using a configuration file named poly3d-r.cfg.
This is a plain ascii file you can edit directly and set the parameters
according to the comments there. executing 'poly3d-r -z' will show the
current configuration as read from the configuration file. This file can be
in any directory which is in your path - the same place as poly3d-r.exe is
probably a good choice.
The program will use 80?87 if it detects one - uses the Turbo C 80?87
autodetect, or will run (much!) slower without it...
As this program is not interactive, usage is quite simple, and only
control available is using the command lines options.
1. If the input file is ill, i.e. some polygons are degenerated, (2 vertices
are identical etc.) they will be ignored is the next passes. Use [-m] if
you want to see them.
2. Although not supported by other programs, it might be useful to specify
the exact RGB color for a given OBJECT. This program adds a new attribute
named RGB but with 3 integer components (the regular one with one index
color - see poly3d-r.cfg, is also supported) to the .'PLY' text data
files: [RGB R G B]. Each of R G B must be integer is the range [0..255].
O.k. if you do have any question, suggestion, or even want to report a bug
feel free to send me Email (see below)
Feel free to make copies of this program, and distribute them FREE of
charge, provided that all this package is distributed.
I am not going to be responsible for any damage of any kind, that this
package may cause (I always wanted to say that...), but I hope you will
enjoy it as I did my best you will. At list I enjoyed writing it.
Gershon Elber[email protected]