top of page
Mini Maya

CIS560: Introduction to Computer Graphics — Fall 2019

C++, OpenGL  

Overview

As a part of my core curriculum for my Computer Graphics (Digital Media Design) major, I took an Introduction to Computer Graphics course. This course covers topics relating to the technical aspects of 3D modeling, such as viewing transformations, polygon and mesh data structures, the render pipeline, and more. The assignments are in C++ and OpenGL. 

 

One of our main projects involved creating a miniature version of Maya, a 3D modeling software used in the graphics industry by artists.

Process

The first part of the process involved creating a half-edge mesh structure for the Mini-Maya application. The structures which defined the mesh included half-edges, faces, and vertices. Then, I set up a Mesh class which could handle setting up the VBOs for any arbitrary mesh. After this, I added certain topology editing functions, such as triangulating faces and splitting edges. I created a GUI which would allow the user to view and select all of the half-edges, faces, and vertices of the object. 

 

After creating the initial set up for the mesh structures and the GUI, I implemented a polar spherical camera that the user could manipulate to change the view of the object. Additionally, I implemented a more complex topology editing function known as Catmull-Clark Subdivision, which allows the user to subdivide any given polygon mesh. After that, I implemented OBJ File Importing which allows the user to select an OBJ file to be read into the program through scanning the positions, UVs, and normals of the object. After this, I implemented the ability to extrude faces of objects, allowing the user to extrude any face along its geometric surface normal by a hard-coded distance. 


For the final features of this Mini-Maya program, I set up a Skeleton class with joints. Each joint had local transformations and overall transformations with respect to their parent joints. I draw these joints in the GUI as spheres, and implemented a Skeleton JSON File Reader which allows the user to load a JSON file and view it as a skeleton in the Mini-Maya GUI. I introduced joint influences on vertices, which allows the joints to influence the vertex transformations. I implemented a mesh skinning function which, given a mesh and the root joint of a skeleton, skins the mesh to the skeleton. The skeleton can be interacted with and transformed by the user before and after skinning. Finally, I implemented shader-based skin deformation using GLSL and ShaderPrograms. In these programs, I passed through bind matrices, joint transformations, and vertex weights and influences to calculate the deformation of the mesh. 

Final Results

Here is a demo showcasing some of the features I implemented for this Mini Maya application. 

©2022 by saranya.

bottom of page