Good News Everybody!

I've been doing a lot of work on Animadead in the last month, despite my lack of updates on the page. I'll do my best to summarize everything that's happened.

-- Documentation
One thing you can check out right now is the documentation ( I used Doxygen ( and Graphvis ( to make reference documentation and some nice collaboration diagrams. I went through all of the classes and members and added very thorough details and I'm working on the guide now. The documentation was generated from my local copy of Animadead, which has quite a few little changes and improvements since the last release.

-- Shaders
I wrote a shader in CG for OpenGL, which didn't work well on my system, I think due to the best OpenGL CG profile my card supported doesn't utilize the full potential of my card, and I had trouble with passing the list of bone matrices to the card. The compiler for the supported profile had a ridiculously low number of uniform parameters I could send. So for my simple boxman demo, which has 41 bones or so, I couldn't get it to work, and I didn't feel like making a model with fewer bones.

So after running into a bit of trouble with CG, I wrote a shader in GLSL, which at first had problems as well, but it turns out all I needed to do was upgrade my graphics drivers. Once I did that I got the shader to work, and it's nice and fast.

I plan to have both shaders working well and will provide them with the next release.

-- Bird Demo
My top priority for this summer is getting a job in the game industry. I would really like to work with a team of people who have worked on a published game and get some experience working directly in the industry. I've only got one more year of school, and then I'm going to be trying to get a career job in the industry and I could use any experience I can get, aside from my own industry-related projects.

One guy I talked to is going to be hiring soon, and so I've been trying to make a demo with Animadead that has a little gameplay so he can get an idea of my programming ability. I made this my top priority at first, and didn't even use my most recent version of Animadead because of a little bug in the exporter. The demo is of player-controlled bird flight. I did some research on aerodynamics, (NASA has a great online resource -\) and the bird flight demo is coming along really nicely.

This demo has been able to really utilize Animadead to the fullest, and it's able to test the math libraries more extensively than the actual library. It's been great to uncover little bugs that didn't show up with the normal library, and to add functionality where there were small gaps in the interface I hadn't noticed. It's also giving me ideas for new features.

At first I started implementing all of these bug fixes and interface features in the last working version of Animadead and was just keeping track of them so I could update them in my latest version, but now I've stepped back from the demo a bit, to get the latest version working. That way I can make progress on both Animadead and the demo, without having to go back and re-implement everything later. This also means I can use the vertex shaders I wrote and in general I think it will be a more impressive demo. By the way you can check out the flapping interface for the demo if you want: (

-- Library Updates
Aside from shaders and demos, I have done some work on the library itself. I redesigned the mesh swapping system, and I am pretty happy with the new design. You can get an idea how it works from the reference docs of ad::Model (, the main interface to the library. The relevant functions are: GenSlot(), LoadMesh(), BindMesh(), UnbindMesh() - overloaded. I'll have more details on how to use this in the guide I'm in the middle of writing.

-- The Next Release
I intend to make another release pretty soon with the following new features:
- Library now builds as a DLL, instead of a static-link-library.
- Some improvements to the math functions and their interface.
- Doxygen style class and member comments.
- Interface Updates (such as mesh swapping functions, and GetFrame() for AnimPlayer).
- Version header in the file formats
- Update load functions to read from a stream, or char buffer instead of just from a file.
- A bone name lookup to index into the world matrices
- An OpenGL GLSL vertex shader and VBO example supermodel implementation
- An OpenGL CG vertex shader and VBO example supermodel implementation

I have also started work on the 3D Studio Max exporter, and will release that separately, shortly after.

-- Changes to the webpage
On the about page ( I've included a description of the versioning I'm using. I added the features page ( to the menu, instead of referring to it from the about page and on the features page, I've added a section that contains the goals for the library up to the next major version, and future plans beyond that. I've also added a digested version of the license (

Posted by John Butterfield 2005-06-22