Here you will find a summary of my 1997 final year project. It's objectives were to create a simplified geometrical model of a human body, to control it and finally animate it. However, as you will see the results are applicable to any model. My supervisor was Dr. A J Stoddart.
This project was the starting point for the pursuit of a PhD degree, here at the Centre for Vision, Speech and Signal Processing (CVSSP). From here you can access my main research page, containing various topics and bibliography on human modelling.
The final result of this project is a family of C++ classes.
Each class describes a different aspect of the modelling procedure.
The family includes standard 3D maths classes (Vector4, Matrix4), as well as
modelling classes (Joint, Link, Human). Additionally, several structures were
developed to contain information relative to the modelling procedure (e.g. angle constraints).
The project was developed in GNU C++ which is basically ANSI C++.
The resulting classes can easily be included into any existing code which
requires similar modelling services. Their only purpose is to calculate the model and export its
data into simple ascii files.
Even though the project started as an attempt to create a simplified model of the human body, the resulting classes do not limit the programmer into creating only human models. One can use the Link class to "assembly" any model, provided that its joints move in a rotational way. Parameters such as link length, joint angle constraints, model initial position etc. can be determined through the member functions of those classes. The model can then be controlled by instructing the links to rotate about an axis by a certain angle.
There is an example of dog (developed only in one day) which aims to show the flexibility in using the Link class :
This project did not deal with visualization issues such as geometry viewers, rendering etc. The model is stored in .tri and .frm files which can both be viewed by the AVS software package.
AVS suports the .tri file format which is a static geometrical representation of a polyhedric 3D shape. These models may consist of many triangles or rectangles. Special operations such as rendering, lighting etc. can then be applied to the model from within AVS.
On the contrary the .frm file format was created for this project aiming to contain animation frames. Moreover, we had to develop a special command line module for AVS called HCLA. Its main purpose is to enable the user to play .frm animations in an AVS geometry viewer. Additionally, the HCLA module provides full control on the Human class (link rotations, .tri and .frm files)
Animations in this project are conceived as a sequence of frames. Each frame contains the full set of the model's angles for that specific pose. The Human class has member functions that can create and manipulate such frame files.
We can load these .frm files by using the HCLA module, and play them in an AVS geometry viewer. The series of frame images can then be recorded, resulting to a number of .x raster files. From there, it is a fairly straightforward procedure to concatenate these files and come up with an MPEG animation.
Here are some MPegs that I've already made :
I just had to include my human.h file and write a simple program for each case controlling the Human instance. That program stored the animation in a .frm file, which was then played in AVS by using HCLA. I chose my favorite angle for recording the animation, lighting, effects ... and recorded the motion to a series of .x files. Those files were then converted to a single mpeg animation.