Last edited 13May04 by James Falkoff

illiMorph: Real-time Morphing of Surfaces into New Coordinate Systems

James Falkoff

Abstract

The mathematician and biologist D'Arcy Thompson considered how mathematical functions could be applied to the shape of one organism to continuously transform it into other, physically similar organisms. IlliMorph is a real-time, interactive program for visualizing transformations like these in three dimensions. The program accepts an arbitrary object specified by a set of control points and transforms the object by mapping its control points into a new coordinate system. The program makes use of splining techniques for drawing surfaces and accomplishing smooth looking transformations.

Here is an example of what D'Arcy Thompson's transformations looked like:

from http://www-gap.dcs.st-and.ac.uk/~history/Miscellaneous/darcy.html

Progress Report: 5may04

Fixed an off-by-one error that made the object look fragmented. Added the ability to pass the object smoothness as a command-line argument. Performance is greatly improved by reducing the value of this parameter.

Here is a picture of the teapot. Here is the teapot after a transformation into a circular grid of polar coordinates.

Progress Report: 30apr04

The program has been successfully migrated into the skel. The object to draw is now read from a text document, adding some flexibility. The ability to view the object's control points is also in place. I have been using a teapot for testing, which uses a hefty 512 control points. Performance is tolerable, though not stellar, at this level of computation.

Having developed a more solid understanding of the process of remapping control points into a new "grid," I have been able to implement two different kinds of morphs so far. I plan to add at least one more from Thompson's On Growth and Form. The program is now set up so that many morphs can be done in succession, which produces some interesting results.

Progress Report: 09apr04

Code is in place for generating and drawing bezier patches from sets of control points. Texture mapping is also implemented using code pilfered from class03. A simplistic scheme for morphing between objects is in place (a completely linear morph).

Much of the data required by the program is currently hard-coded, but it should not be difficult to add functionality for reading objects from files and giving the user more control over the functions used in morphing. I would like to incorporate what I have done into illiSkel but I have not yet been successful in this regard.

The biggest remaining challenge is writing a sophisticated morphing algorithm. One problem I noticed while experimenting with the simplistic, linear approach is that the object tends to travel through itself during some transformations. I'm not sure how to get around this.