Christopher DeCoro

Graduate College Formal, March 2005

From 2002 through 2009 I studied Computer Graphics, culminating in June 2009 with a Ph.D. in Computer Science at Princeton University. My advisor was Prof. Szymon Rusinkiewicz. Previously, I earned a B.S. in Computer Science from UC Irvine, and spent a year at New York University. This site was my professional presence on the web during that time; I have since changed careers, and I am currently a student at Yale Law School

Contact Info

To contact me, you can reach me at:

Mobile Phone:
Home Phone:
Office Phone:
Office Fax:
AOL Instant Messenger:
Email Address:
cdecoro (at)



I have published nine peer-reviewed computer graphics papers and two book chapters, in addition to three papers in other fields

Rendering Filters for Controlling Detail and Creating Effects
Ph.D Thesis (June 2009)
Scalar to Polygonal Extracting Isosurfaces Using Geometry Shaders
Chapter in ShaderX7, published by Charles River Media (March 2009)
Advanced Interactive Medical Visualization on the GPU
Journal of Parallel and Distributed Computing (October 2008)

Implementing Real-time Mesh Simplification Using the GPU
Chapter in ShaderX6, published by Charles River Media (March 2008)

Bayesian Aggregation for Hierarchical Classification
Princeton Computer Science Techincal Report TR-785-07

Subtractive Shadows: A Flexible Technique for Shadow Level-of-Detail
Journal of Graphics Tools, March 2008
Technical Report 

Bayesian Aggregation for Hierarchical Genre Classification
International Symposium on Music Information Retrieval 2007

Stylized Shadows
Symposium on Non-photorealistic Animation and Rendering 2007

Real-time Mesh Simplification Using the GPU
Symposium on Interactive 3D Graphics 2007

Inverse Shade Trees for Non-Parametric Material Representation and Editing

Hierarchical Shape Classification Using Bayesian Aggregation
Shape Modeling International 2006
Files: 4-Page Tech Report, Conference Presentation, Princeton Shape Benchmark

Pose-independent Simplification of Skeletally Articulated Meshes
ACM Symposium on Interactive 3D Graphics and Games (April 2005)
Files: Conference Presentation, General Exam Presentation, Demo Movie

Efficient Implementation of Real-time View-dependent Multiresolution Meshing
IEEE Transactions on Visualization and Computer Graphics (May-June 2004)

XFastMesh: Fast View-dependant Mesh Simplifcation from External Memory
IEEE Visualization 2002, October 2002
Files: Conference Presentation, XFastMesh Demo Movie

A Modular Client-Server Discrete Event Simulator for Networked Computers
Proceedings of the 35th Annual Simulation Symposium 2002, San Diego, USA, April 2002

A General Purpose Discrete Event Simulator
Symposium on Performance Evaluation of Computer and Telecommunication Systems, Orlando, USA , July 2001


Imagedb - Image Debugging Library
In my work I frequently have the need to visualize some buffer of data as an image. This simple library that I wrote allows for easy, printf-style debugging of raw image data.
Hierarchical Disk Usage Meter
Example of Forms.NET that shows a directory's disk usage in a convenient tree view

COS333 Managed Projects

In Spring 2005, I was assigned to manage 4 groups of students as they designed and implemented course projects for COS333. Over the course of the semester, we had weekly meetings to review their progress. I'm quite proud of their results, and I've included links to their project websites.

What's My Image
We've all seen (or should have), where given a picture of a person people vote as to their physical attractiveness. But this is only a specific instance of a more general question: what is a person's public image. This site does a great job of generalizing the hotornot concept to include arbitrary questions, and manages to be an incredibly fun and addicting timewaster.
Princeton Room Draw Guide
Every year, Princeton students select their rooms through a draw process, where they select from a list of available rooms. These students thought that it would be helpful to have more detailed information online about available rooms

Computer Vision

In Spring 2004, I took Computer Vision at Princeton University

Edge Detector
Using various techniques, we are able to produce an output image where lines in the output indicate edges in the original.

Image Quilting
Given a source texture, the image quilting algorithm allows us to create an arbitrarily large image resembling the same texture.

By projecting the image of a face onto a lower dimensional coordinate system defined from the SVD of a training set, we can recognize faces

Using traffic cameras, we can automatically track the speed of passing traffic.

Advanced Computer Graphics

In Fall 2003, I took Advanced Computer Graphics at Princeton University

Monte Carlo Path Tracer
To simulate the wide range of lighting conditions that are seen in nature, we implement a system that simulates light transport by tracing paths through the scene. Rather than consider all possible paths of light, we use the Monte Carlo technique to randomly sample important paths, and use the results of sampling these paths as an approximation.

Lightfield Viewer
Rather than represent a scene by modeling object geometry, we can instead sample the lightfield, a function that measures the transport of light for various views of a scene independent of the underlying scene geometry, and interpolate to reconstruct arbitrary views. Sample data for the program can be found here

Volume Viewer
In many scientific fields, especially medical imagery, volume datasets are very common. In this project, a friend and I implemented a simple, interactive volume rendering system.

Real-time Graphics Solutions

In Spring 2003, I was the TA for a class entitled Real-Time Interactive Computer Graphics. Essentially, it was a video game class where the students worked on some simple 2d games. I wrote several assignments for the class, which were quite detailed, and which I have here.

Motion Capture Assignments

Here are the writeups for some simple assignments in a Motion Capture class that I took in Spring 2003. I hope to have the source code available soon

Color Tracking
Given an image of a person, we would like to know which pixels correspond to the person's skin, and which are background or clothes. This can be useful in tracking the position of a person's head or hands. We select a training sample of skin, to which we fit a gaussian distribution, and use this distribution to predict if other pixels correspond to skin.

Optical Flow
In another tracking problem, we would like to determine (or at least approximate) the movement of some feature across the image, represented as the horizontal and vertical translation of some point. We use the well-known Lucas-Kanade optical flow algorithm, which represents the problem as a minimization of a quadratic error function. We use the linear first derivative to approximate the minima, and use repeated searches until the error converges. This can be thought of as a form of Newton's method.

Fall 2002 Graphics Assignments

These are applets that I worked on for a Graphics class in the Fall of 2002. Some of them seem to have a problem unless you have the official Java Runtime Environment from Sun, which you can get at

A simple drawing applet that demonstrates the basics of 2d graphics in Java.

Now that we can draw, we can also apply 2d linear transforms to a simple object.

Implements an OpenGL like interface to display a 3d model, demonstrates loading and parsing a geometry file, controlling the scene with a virtual trackball, and performing the basic 3d rendering pipeline from transforms to lighting to rasterization.

Marble Mouse
A basic raytracer that uses Perlin Noise to acheive interesting texturing and lighting effects on sphere surfaces, and allows for interactive experimentation with aspects of the lighting equations and texturing.

Rocky Rodent
Extends Marble Mouse to include user-configurable bump-mapping based on the noise function, as well as multiple configurable lights and simple shadowing.

The Running Man
Demonstrates skeletal animation with forward kinematics by loading geometry and animation files

The Running Man 2 - Halloween Edition
Extends the previous example with rasterizing, smooth shading, lighting, texturing and z-buffered hidden surface removal.

Interactive Bezier splines

We generalize the previous assignment, which implemented smooth curves, to the second parametric dimension, thus implementing smooth surfaces.

For our last act, we model various dynamically changing systems with a particle system simulator.


Invertible Elements Presentation
A presentation on a technique I developed to find certain patterns in DNA sequences
Subdivision Lecture Notes
Notes that I wrote up for a class in Geometric Modeling, on the topic of subdivision curves and surfaces
Subdivision Surfaces Presentation
A presentation of the paper "Subdivision Surfaces for Character Animation"
Object Tracking Presentation
A presentation of the paper "Visual Tracking of High DOF Articulated Structures"
Deformable Object Registration Presentaion
A presentation of several papers dealing with registration of deformable objects
Distributed Cooperative Buffering Presentation
A presentation of an idea for accelerating networked file access by transparently using a network as a stage in the memory heirarchy
Maya Skeleton Exporter
Simple and very non-robust script to export skeletons from Maya. Select a node and run sklExport(). Email me if you have more questions.
Robust Mesh Completion Video
My colleague Joshua Podolak wrote a paper on hole filling / mesh completion, and I rendered, narrated, and edited this video for the submission
Face Synthesis Completion Video
My colleague Alex Golovinsky wrote a paper on statistical facial synthesis, and I narrated and produced this video for the submission
Nice Things about C#
Some features that I like about Microsoft's C#, especially as compared to Java
Some Hopeful Words
Computing My Erdos Number
How to trace me to Paul Erdos in Four easy steps

Copyright © 2009 Christopher DeCoro