Animation with Captured Gestures

Smalltalk-80 was not quite fast enough to do animation live with 2-1/2d graphics. To up the speed I created a 2d environment of inverting rectangles and made them come to life.

I held the theory that the mass of a human arm moving a computer mouse would create trajectories that were suggestive of intention important when interpreting motions in a computer animation.

I built an animation system that recorded the mouse trajectories when manipulating figures in a structured diagram. The gestures became another figure in the diagram and could be manipulated themselves.

My editor supported three kinds of Figures: Rectangles, Gestures and hierarchal Groups of these figures.

Turtle

The move gesture is grouped with the turtle image. Then rotate turns both the image and the gesture so that the move goes in a new direction.

One could create a turtle from a Rectangle. One Gesture would show the rectangle how to move. The rectangle and gesture could be combined into a Group. Then, when that group was rotated, and that gesture captured, then the set of turtle motions would be complete: go and turn.

The turtle example depends on being able to rotate both a rectangle and a gesture. The group provided the scope for the rotate command that cause the move gesture to always move the turtle forward.

My prototype could not rotate rectangles, let alone images, but I was working on the sequence of BitBlts that would perform arbitrary Rotation in Three Skews.

Face

Head: Face. Face: Eyes, Mouth. Nod: Move Face up and down. Eyes: Left Eye, Right Eye. Look: Move Eyes left and right. Blink: Size Left Eye up and down. Chomp: Size Mouth up and down.

Using my fast graphics and persistent groups I could create an animated face in seconds and teach it how to perform a Nod, Look, Blink and Chomp.

A Face made of inverting rectangles Blinks, Looks, Nods and Chomps, all at the same time.

My visualization methodology was based on the progression: Do, See, Name.

First one would use the mouse to do a gesture.

Then the gesture could be played forward and backwards using handles on the graphical object so it could be seen.

Finally the useful gestures would be given names that could be used to animate other programs.

Although my face was made of only inverting rectangles, when it started moving it became real.

Once someone understood that I had temporal primitives, I would ask the face to Blink, Look, Nod and Chomp all at the same time. The effect was crazy, but still humanoid. That was my point.

Elevator

Shaft: Elevator, Floors. Elevator: Cab, Door. Up: Move Elevator up one floor. Down: Move Elevator up minus one floor. Open: Size door one door width wider. Close: Size door minus one door width wider. Enter: Group Rider in Elevator. Exit: Ungroup Rider in Elevator.

I had long been fascinated by Knuth's Elevator Simulator. I could use captured gestures to create an animation for an elevator simulator.

Riders wait for and then Enter and Exit the Elevator as it moves Up and Down between Floors.

A feature of my animation is that it could show mistakes like a door opening twice without closing. The door opening would become larger than the Cab. Obviously something wrong.

I have VHS video tape of these animations being constructed and operated within the drawing tool.

I showed these videos at an invitation only workshop organized by Ralph London and attended by Adel Goldburg and Dan Ingals. I was pleased to show Dan something that he hadn't seen before.

See Elevator Simulator for a complete simulation/animation realized as a CocoaWorld.

See Elevator Simulator Revisited for a recent incarnation in 100 lines of ruby.

See also Bit Video for much more complex transformations.