Inspiration

This tool was inspired from the graphics of Geometry Wars

Geometry Wars

Enemy ships in the game are based off graphics primitives and are a very simplistic design which adds to the charm of the game.

What it does

Morphan is a vector graphics sprite animator, users are able to draw sprites using various graphics primitives (lines, rectangles, circles, ellipses, arcs, polygons, and bezier curves) and specify keyframes. Users can then edit the keyframes ever so slightly by adjusting the control points of each primitive. The tool also has a player that shows up what the animation will look like. The player interpolates between the keyframes to animate your sprite.

How I built it

It is a desktop application built in C++ using the wxWidgets for the UI. The GUI was designed in wxFormBuilder

Challenges I ran into

The implementation of moving components. This required me to know the minimum bounding box for each primitive, the code for a minimum box for an arc was particularly tricky due to the way the control points for an arc are specified.

Accomplishments that I'm proud of

You can create functional units, but using the snap to point feature this allows you to connect graphics primitives together easily and modify control points which would modify that point for all of the primitives that share that point.

The save data for a morphan uses Google's protocol buffers library so a reader can be easily made by using the protoc binary to generate the deserializer.

What I learned

Some computer graphics algorithms such as finding a bounding box for various shapes with the most challenging being an arc, smooth interpolation, some trig math involved with generating regular polygons.

What's next for Morphan

Implementing undo/redo functionality, implement operations for all primitive types, clean up code.

Demo

video

Built With

  • c++
  • protocol-buffers
  • wxwidgets
Share this project:

Updates