l i n u x - u s e r s - g r o u p - o f - d a v i s
Next Meeting:
July 7: Social gathering
Next Installfest:
Latest News:
Jun. 14: June LUGOD meeting cancelled
Page last updated:
2001 Dec 30 16:50

The following is an archive of a post made to our 'vox mailing list' by one of its subscribers.

Report this post as spam:

(Enter your email address)
Re: [vox] Couple Questions
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [vox] Couple Questions

On Wed, Sep 05, 2001 at 03:16:23AM -0700, Tom wrote:
> Would you Post:
> 1) Seed / Inst for those Fractal Worlds

Well, as Henry said, I didn't actually use a seed.  However, after the
meeting, at Baker's square, we discussed some ways to make 'ppmforge'
generated different views of a particular 'planet' (that is, sphere-mapped
fractal :) )

Running ppmforge with the "-h" (help) option shows the following
options are available:

usage:  ppmforge 
      [-width|-xsize <x>] [-height|-ysize <y>] [-mesh <n>]
      [-clouds] [-dimension <f>] [-power <f>] [-seed <n>]
      [-hour <f>] [-inclination|-tilt <f>] [-ice <f>] [-glaciers <f>]
      [-night] [-stars <n>] [-saturation <n>]

Let's assume we can live with the following defaults that ppmforge uses:

  * default size (256 wide x 256 high)

  * default 'mesh' (a value which affects the realism of the
    generated image; the higher the mesh, the more RAM ppmforge uses) (256x256)

  * default 'dimension' (the 'roughness' of the terrain) (2.4)

  * default 'power law scale' value (affects 'elevation' of terrain) (1.2)

  * default 'ice' value (how far glacier caps go towards the equator) (0.4)

  * default 'glaciers' value (how high terrain needs to be to be icy) (0.75)

  * default 'stars' value (10th of percent of pixels that are stars) (100)


  * default 'saturation' value (how colorful the stars will appear) (125)

All we need to do to make a sequence of pictures of a particular planet
rotating is to feed the same seed (for the random number generator; using
the same seed each time causes the same landscape and stars) and
different values for 'hour' (12 = high noon, BTW)..


  for h in 00 01 02 03 04 05 06 07 08 09 10 11 \
           12 13 14 15 16 17 18 19 20 21 22 23
    ppmforge -seed 1234 -hour $h > planet-$h.ppm

This creates 24 PPM images, named "planet-00.ppm" through "planet-23.ppm"
which all look the same, except the lighting is different.

Note: the "\" at the end of the 'for' line causes the next line to
be a continuation.  (It's as if there were no "\" and end-of-line).

Here are a few tweaks:

1. Make the seed a command-line option:

     ppmforge -seed $1 -hour $h > planet-$h.ppm

   So if you run the above shell script like so:

     ./draw-planets.sh 93468

   ppmforge would use "93468" as the seed.

2. Add the seed to the filename (so you can run multiple times, and
   keep each set of 24 images without overwriting them):

     ppmforge -seed $1 -hour $h > planet-$1-$h.ppm

   So in the above example, we'd have 24 images named "planet-93468-00.ppm"
   throguh "planet-93468-23.ppm".

3. Make the program spit out JPEGs instead of large, uncompressed PPMs :)

     ppmforge -seed $1 -hour $h | cjpeg > planet-$1-$h.jpg

   (The output of "ppmforge"--its "stdout"--is not redirected into a file...
   instead, it is 'piped' ("|") into the "cjpeg" program.  "cjpeg", not
   seeing any filename, decides to read from it "stdin", thus reading the
   PPM data coming out of "ppmforge".  It then writes a JPEG version of
   that PPM data to its "stdout", which is THEN redirected (">") into
   a new JPEG file)


I also mentioned that one could create a simple CGI program which
spat out a fresh "ppmforge"'d image using the current time. :)


echo "Content-type: image/gif"

ppmforge -seed 12345 -hour `date +%H` | ppmquant 256 | ppmtogif

When this CGI is accessed by a web browser, it first tells the browser
"I am a picture, in GIF format".

It then runs "ppmforge" with a particular seed (I picked "12345").
For the "-hour" value, we actually run the Unix "date" command and
ask it to display only the current hour ("+%H").

The PPM data spat out by "ppmforge" is then piped to "ppmquant" to make
sure it's at most 256 colors.  The now-256-color PPM data is then spat
out to "ppmtogif", and GIF data is sent to "stdout" (the web browser).

Now, you can just "<img src="planet.cgi" width=256 height=256 alt="planet">"
in an HTML page to waste lots of CPU! :)

Reload an hour later and the lighting will change. :)

> 2) How-to get a font to take the Custom Color (from Gradient color bar)

See my next message :)


PS - Henry, odd that ppmforge isn't available on all systems.  Its man page
     dates it from October 1991!  (It's almost 10 years old! Happy bday!)

LUGOD Group on LinkedIn
Sign up for LUGOD event announcements
Your email address:
LUGOD Group on Facebook
'Like' LUGOD on Facebook:

Hosting provided by:
Sunset Systems
Sunset Systems offers preconfigured Linux systems, remote system administration and custom software development.

LUGOD: Linux Users' Group of Davis
PO Box 2082, Davis, CA 95617
Contact Us

LUGOD is a 501(c)7 non-profit organization
based in Davis, California
and serving the Sacramento area.
"Linux" is a trademark of Linus Torvalds.

Sponsored in part by:
Appahost Applications
For a significant contribution towards our projector, and a generous donation to allow us to continue meeting at the Davis Library.