Assignment2 - Painterly Rendering

For this assignment you are going to write a painterly rendering program. You should end up with images that look like the following. Read this paper by Haeberli to get a better idea. Your program should allow you to paint in a window and reveal an abstract version of whatever image file was specified on the command line. It shouldn't crash. It shouldn't be obviously broken in some other way. Otherwise be creative. Look at the demo implementation at the bottom of the page for examples. If you are working with a partner your program should be a little bit more impressive -- have options (command line or runtime) that control the painting behaviour or do something interesting with the source image color or source pixel location.

Try it out with this Java implementation (or Adam's demo at the bottom of the page)

We'll give you a Makefile and an some functions to load an image from a file, and otherwise you will write it from scratch. You basically need to figure out these things:

  1. Register callbacks in GLUT and open a window
  2. Figure out how to find out what the mouse is doing
  3. Figure out how to draw using OpenGL
  4. Get creative and make your own painting style

Download the base code for the assignment here: painterly-base.tgz

Here is a .ppt of the lecture-y kinda information I covered in the lab: assignment2_instruction.ppt

some example source images to try with your renderer

 

Working with image files

You should be able to paint over your own image files, or any other JPG image you pull from the web. Unfortunately the function we're going to give you only loads PPM format images. So how do you convert? I use tools that are part of the ImageMagik library. Basically you just make the following call on the command line and you get a ppm image. 

convert -format ppm <filename.jpg>

If this isn't installed in the labs, I'll see if it can be added, or alternately we can probablyThere are presumably lots of other free tools for image conversion, but this package turns out to be really useful and scriptable.

OpenGL Resources

Other Useful links


Yup, your TA does your assignments too...

source image
demo executable and documentation (you can export your own demos using make demo)