Geometric Mesh Editor

// //

With Yingting (Lucy) Xiao and Xiaoyan (Zia) Zhu.

As an undergraduate, this was the final project of our first graphics programming class.  Presented as a "mini-Maya", the goal was to work in groups of 3 to build a (very) basic polygonal mesh editor.  The core of this is the half-edge data structure, which is a neat way to represent polygons to make them easily editable.

I mocked up an example in Maya proper:

As you can see, each triangle has an edge pointing to each of the vertices that define it.  This way, the user can select any of the three attributes of the mesh.

Beyond the base data structure, there were 3 distinct roles for this project.  I was the "geometer", responsible for editing individual components of the mesh, as well as implementing Catmull-Clark subdivision.  That algorithm is a way to "smooth" a polygonal mesh easily.  Here is a diagram from wikipedia:

It's a pretty straight forward algorithm actually.  Although at the time it seemed absurdly complicated.  One neat thing about it is that you can tag edges as "sharp" such that they will stay creased as the rest of the mesh smooths.  

Lucy was the "deformer", which involved implementing both free form and global deformations.  This involves creating a low resolution lattice of points that can be edited.  Those lattice points then are used to drive deformations of the mesh.

Then global deformations are just moving the lattice points algorithmically.

Zia was the "visualizer", which involved implementing an quaternion arcball camera.  This type of camera involves moving around on a 4th dimensional sphere, so I'm going to my explanation here.  She also implemented a number of simple shading models in glsl.

Results of my part, as well as Lucy and Zia's, can be seen in this video: