Introduction

Mini Maya is a mesh editor based on Autodesk Maya. The program makes use of the half-edge data structure to store component information and draw it in OpenGL. The mesh is traversed on a face-by-face basis in order to pass vertex and fragment data into OpenGL.

I completed this project for CIS460 (Interactive Computer Graphics) in the Fall 2018 semester of my sophomore year. It was a 3-week long project, with a deliverable due each week.

Mesh Operations

In my mesh structure, I maintained std::vectors of vertices, half-edges, and faces, each of which was denoted by a unique ID number. This made it easy to select and edit the attributes of specific components, such as vertex position and face color, through the GUI.

Along with component transformation, the application supports several fundamental mesh operations, including:

  • Edge Splitting
  • Face Planarity Testing
  • Face Triangulation
  • Face Extrusion
  • Edge Loop insertion
  • Catmull-Clark Subdivision

Mesh Import

The program supports generation of simple mesh structures such as a cube, whose attributes are hardcoded into the program. It also supports obj file import for more complicated structures, which parses the file and generates half-edge mesh data from the given information. 

Virtual Skeleton

The application also allows importing of a JSON file that contains skeleton information. This information is stored in a scene graph tree, which is then processed and passed into OpenGL in order to draw the joints to visualize the skeleton. The skeleton can be bound to the mesh and deformed, whereupon the deformation data is passed into OpenGL and applied to the data in the mesh’s vertex shader. 

To calculate the relative influences of each joint on the vertices in the skeleton, I implemented two different skinning algorithms: a simple distance-based Linear Blend Skinning algorithm that samples the two closest joints to each vertex, and a Heat-Diffusion Based algorithm that traverses the half-edge mesh structure so that mesh connectivity is taken into account.