The stages of this project are ordered by most recent.
Smooth Normals and Toon Shading
At each vertex I averaged the normals of incident faces, and interpolated normals across faces. This creates a soft appearance without subdividing any geometry. I also created a toon shader in GLSL by rendering a discrete lambert ramp over an expanded black backface.
Freeform Mesh Deformations
Here I've implemented freeform deformation using Bernstein polynomials that draw information from a lattice space in order to compute transformations upon each vertex. To manipulate the model, I created a customizable lattice, as well as expedient shortcuts for twisting, tapering, bending, and squeezing operations.
Skeleton Import and Skin Binding
In order to pose or animate meshes I created a .JSON file importer to receive and render mesh skeletons. This allowed for transformation of skeletons, and smooth binding of mesh vertices via bound vertex shader to deform the cow using its bones.
Half-Edge Mesh Structure, OBJ Import, and Catmul-Clark Subdivision
I created a half-edge mesh representation for intelligible mesh editing. I then created a .OBJ mesh importer to convert obj models into my half-edge format. Finally, I implemented Catmull-Clark surface subdivision to smooth out geometry.
Octree-Accelerated Raycast Picking
Here I implemented raycasting into my 3D environment. In order to facilitate picking, the space was recursively subdivided into octants. This allowed for fast picking even at ~10,000 primitives.
Object Heirarchy and Qt User Interface
I was able to create a UI in Qt Creator C++ to build/edit scene graphs, then imported my spider and played around with the joints. I also implemented a camera, which dictates the view and projection matrices for OpenGL using its spherical coordinates and field of view.
OpenGL Primitive Rendering with C++
An animate spider created in C++; lots of wrestling with OpenGL. Uses arrow keys to move limbs based on scene graph heirarchy.