Computer Graphics: Part One

Subdivision Surfaces are the current mainstay for rendering complex models in computer graphics. The surfaces are composed of either triangles or quadrilaterals, and undergo a recursive subdivision process in order to create very smooth models. This semester for my Practicum requirement, my partner Ben and I had to create a program that subdivides meshes; below are some screen shots.
Our program subdivides triangle meshes triforce style, 4 new triangles for every 1 original triangle. Creating exponentially more triangles does not, however, produce smooth meshes. After a subdivision, each vertex position must be recalculated using the positions of the vertices around it. There are many accepted ways to calculate vertex positions and not one is considered to be 'more correct' than the others. Ben and I chose the common Loop subdivision scheme.

Written in rather bloated Java code, our subdivider can load in meshes with about 2k triangles, and subdivide five or six times before running out of heap space ;) We added real-time deformation of the mesh: you can drag a vertex to a different world space location and the program will update all of the subdivided triangles affected by the change. It will also linearly interpolate the texture coordinates of the model as shown for the brick-textured cube.

If you’re even more curious about our implementation, or want to see more nifty subdivision screenshots, just leave a comment and let me know :)


Tom W. said...

That sounds pretty darn cool. I'll admit that I only understood about 50% of it, but that part makes sense. Hope you're enjoying the southwest.