Skeletal Man

I created several new classes this week, MeshJoint and SimpleJoint. SimpleJoint is the base class for all other joints and Mesh is an extension of it. The MeshJoints don't need nearly as many data elements as the Joints do, so I thought it would be more efficient to separate the two.

I'm implementing skins, or meshes, with a final layer of joints, called MeshJoints. These MeshJoints have the same coordinate tracking functionality as Joints, but that's it. You can't move them or change their rotation or anything like that, they just follow around with the Joint that they're tethered to.

In the future, I would like to create a DeformedMeshJoint as a subclass of MeshJoint that allows for degrees of movement, possibly Actions like Joints have that respond to forces.

Right now, however, I need to figure out a way to get the mesh to draw. Below I have two circles of MeshJoints around the head Joint, but the system has no way of knowing HOW exactly to fill in those polygons. I think that there will have to be a containment mechanism of some sort that contains the connectivity of the MeshJoints.

Each MeshJoint has an ID associated with it in the Joint.MeshMap<int, MeshJoint*>, maybe the ID system will become more advanced as I put a connection mechanism in, but the theory is that something will list what MeshJoints make up triangles, and in what order. BaseJoint might contain this mechanism.

That's what I'll be working on next week. Hopefully I'll have an actually skinned guy up at that point that moves with his Joints. One problem I can already see is connecting MeshJoints that are tethered to different Joints....hmm....

Perhaps the per Joint ID system is a bad one, the BaseJoint should probably keep the Map on it's own, while the Joint's themselves only keep vectors of the MeshJoints they're attached to, damn, I wish I would have thought of that sooner. Well, it looks like MeshJoints will be contained much in the same way that Actions are.

Controls:
movement - same as usual
i - increments time
r - resets time