The goal of this project is to create a huminoid model that can realistically interact with terrain. To do this I created a Blender and Maya exporters to give mesh, bone, and animation data to my program. After this was done I interpolated keyframes from the animation data to display the character animation. One particular feature I wanted to have in this project was the ability to separately manage animations for individual bones. To do this I separated the matrices for animations from the bind pose matrices. Doing this allowed me to easy swap out matrices used during IK and those created from the fixed loaded animation.

As for inverse kinematics, I created "limbs" that are basically a string of bones. At each frame every time the program calculates a new position for each bone, the program traverses up the tree until it reaches the root of a new limb. At this time it calculates the needed rotations to reach the given goal point, which you can see in the program as a terquois dot. As it progresses up the tree. If there is a rotation given from the IK solver for the given bone, the program uses this matrix instead of the static animation matrix.

Sample Video
Here is a sample recording of the features in my project. Here you can see the character's left arm has many constraints that limit the angles the IK Solver will allow. As you can see, it looks much better than the right arm, which has no constraints attached to it.
Example Photos