EMAIL: jha@aughey.com
NAME: John Aughey
TOPIC: Metamorphosis
COPYRIGHT: I SUBMIT TO THE STANDARD RAYTRACING COMPETITION COPYRIGHT.
TITLE: Senior Software Engineer
COUNTRY: United States
RENDERER USED: Povray
TOOLS USED: Self written Rubik's Snake animator
CREATION TIME: 36 hours
HARDWARE USED: 300Mhz Pentium II
ANIMATION DESCRIPTION:
This animation shows a Rubik's Snake bending into 3 different
shapes; a propeller, a dog, and a ball.

DESCRIPTION OF HOW THIS IMAGE WAS CREATED:
I remember playing with the Rubik's Snake for hours on end as a child.
With a little work, I thought, I could write a program which "morphs"
the snake into different forms.

I wrote the program in Perl and used the OpenGL and Tk modules for the
user interface.  The Spline module is used for interpolating camera
positions.  This program calculates the snake position according to
the positions of various slider bars.  As you move these slider bars,
you can watch the snake twist into different forms in the OpenGL
window.  You have full control over the position and orientation of
both the snake and the camera.

This program can also read a file which describes how to twist and
turn the snake and position the camera to create an animation.  You
can view the animation in real time in the OpenGL window and tweek
positions as you see fit.  Once you're satisfied with the animation,
the program can write out a Povray file for each frame.  Povray uses
this file to render a photorealistic picture.

The snake itself is made up of 24 individual links.  Each link
consists of 9 cylinders, 6 spheres, and 5 polygons.  The cylinders and
spheres give the link a beveled edge with rounded corners.  The
polygons meet the cylinders at the tangent points so each link of the
snake appears as one solid object.

Each link is positioned relative to its neighbor, so if one joint
twists, all the links after it will rotate as well.  In OpenGL this is
accomplished using the accumulating transformation matricies; in
Povray it's accomplished using unions.

One interesting note: I don't own a Rubik's snake.  I havn't even
picked one up for about 8 years.  I was able to create the shapes by
moving sliders bars in my snake animator program and watching the
snake bend and twist in the OpenGL window.

I've include all of my source code with my submission.  I decided to
include the code at the last minute, so it isn't documented very well.
It requires the OpenGL, Tk, and Spline modules which can be found at
http://www.perl.com/CPAN/.  If you don't have an SGI machine, you can
use the Mesa library as a substitute for OpenGL.  The Mesa library can
be found at http://www.ssec.wisc.edu/~brianp/Mesa.html.
