==========================================================================
                 ____                                                   ___
                / / /                                                  / //
               / / /        PLANET GENERATOR                          / / /
              / / /                                                  / / /
   ____      / / /          BY: Russell Leighton          ____      / / /
   \ \ \    / / /               December 1987             \ \ \    / / /
    \ \ \  / / /                                           \ \ \  / / /
     \ \ \/ / /                                             \ \ \/ / /
      \ \/ / /                                               \ \/ / /
       \/_/_/                                                 \/_/_/

==========================================================================

Any comments?  I can be reached at the following address:

               Russell Leighton
               845 W. Newgrove
               Lancaster, CA  93534

This program has been  released  to  the  public  domain  and can be freely
distributed.  I only ask  to  be  given  credit  for  the long hours spent.
Please include this file with the program and if any parts are used I would
be interested in knowing about it.

==========================================================================

This is version 1.0  and  is  therefore  somewhat  lean  on user interface.
There may be updates to come.  If you have any suggestions I welcome them.

*Note: To quit, use the "QUIT" menu option.

Simply put, this program will map  any  IFF  picture around a sphere (hence
forth referred to as a  planet).   The  planet  is then shaded based on the
location and size of  a  light  source.   The  mapping  is done by equating
constant latitude  and  longitude  lines  around  the  planet with constant
horizontal and vertical lines on the  map.   The planet view is computed by
applying a transformation based on  inputted  planet  rotation angles.  The
result is displayed using HAM mode  in  lo-res interlaced resolution (320 x
400).

The method used to shade the planet involves taking the cosine of the angle
between the normal vector on the surface of the planet and the light source
vector and multiplying each color  component  with  the result.  The actual
color displayed is computed by  attempting  to  get as close to the desired
color as possible.  This is accomplished  in three steps.  First a color is
computed using the rules of HAM mode (see ROM Kernal manual).  A difference
factor is then computed and compared to  the difference between the desired
color and each color in the existing  color  palette  (initially this color
palette may be all black).  If  a  color  in  the palette comes closer then
that color is selected and  the  difference  factor  is again computed.  If
this difference exceeds a set  maximum  allowed difference then the desired
color is added to the color palette  (if  room exists).  In this manner the
color palette is adaptive (you can  override  this feature by specifing the
map color palette be used  as  the  planet  color  palette).   A  color bar
located in the screens title bar  shows  the  planet color palette as it is
updated.

If the specified map is a HAM  picture  a further complexity develops.  The
program computes the map coordinates from  the pixel location on the planet
display.  Therefore, the  map  coordinates  will  not  progress in a linear
fashion. For HAM pictures  the  RGB  value  at  any  location on the map is
dependant on all preceding  color  values  on  a  particular row and is not
necessarily  dependant on  the  last  color  value  obtained  from the map.
Therefore, to obtain the correct RGB  value  for  a location on the map all
preceding color values must be taken  into  account.  The overall effect is
an increase in the amount of time required to generate the planet.

The size of the light source has an effect on the "wrapping" of the lighted
portion of the planet.  If the light source  is the same size as the planet
then half  the  planet  will  be  illuminated.   If  the  light  source  is
significantly larger than the planet  (say  5 planet radii) then the planet
will be illuminated  around  a  noticably  larger  area.   Likewise, if the
light source is smaller than the  planet  the  illumination will cover less
than half.

Both the planet rotation and  the  light  source  position are specified in
terms of rotations about the  three  axes,  x,  y,  and z. Counterclockwise
rotation is positive  and  clockwise  is  negative.   These  angles  can be
specified in any  order.   The  resulting  rotations  are very dependant on
this order of input. I  could  try  to  explain  how  the transformation is
accomplished, but I'm lazy so I recommend just trying some different angles
to get a feel for how it works.   I  suggest  using  the  same angles while
changing the order.

Currently this program can only be run from the CLI and takes the following
form:

       planet [filename] [-r -px -py -pz -lx -ly -lz -s -f -h]

The arguments are optional and may  or  may not require numerical input.  A
filename may be supplied for  the  planet  map.   This  file must be an IFF
picture (form ILBM) and may be  in  any  mode  or  mixture of modes (LORES,
HIRES, LACE,  HAM).  If no filename is  given then the map is assumed to be
planet.map (which must be present).  The radius of the planet (argument -r)
is specified in  number  of  pixels.    If  the  radius  is not input it is
assumed to be 180 pixels. The planet  rotation  angles (arguments -px, -py,
-pz) are specified in degrees.  If  any  of  these angles are not specified
they are assumed to be 0.  Likewise,    if  the angles for the light source
position (arguments -lx, -ly, -lz) are  not input they are assumed to be 0.
The radius of the  light  source  (argument  -s)  is  given in terms of the
planet radius.  A value of 1.0 indicates that the  light source is the same
size as the planet.  This is the default  value.  If  you require the color
map of the planet be the same as the  map  include  the -f  argument.  This
option is useful for those occasions when successive planets  are generated
from the same  map  and  they  require  the  same  color  palette (this  is
required by some  animation  routines).   This  argument does not require a
numerical input.  If it is not  included  then  the planet color palette is
adaptive and will depend on the  values  specified for the other arguments.
The  maximum allowable difference  can  be  specified with the -h argument.
The hard  upper limit for this value  is  45 (the difference factor between
white and  black) and hard lower limit is 0 (somewhat rediculous since this
would result  in every  computed  color  value  failing  the final test and
being added to the  palette).  The default value for this argument is 6.

An example follows:

   planet fractal.map -r 120 -pz 30 -py 20 -lx -30 -ly 45 -h 12 -s 2.0 -f

If you need to  be  reminded  of  the  optional  arguments  just  type  the
following:

   planet ?

I have had very good  success  with  a  variety  of  pictures  ranging from
paintings to digitized pictures.  I  hope  that  this program provides some
insight into programming  with  graphics  on  the Amiga.  A lot of time was
spent trying to get HAM pictures to process  properly and I feel that those
parts of the program could be very useful.

 

