I have mesh, uvs, materials and image files all loading and I’m trying to get joints.
Applying the translates I get a Seymour skeleton flat in the xz plane and above y=0.
Accumlating all the different rotations (which affect child joints), I get a very distorted skeleton, arms and legs bent at odd angles.
I can find very little about joints, here or in the one Collada book I have, other than to accumalate all rotations post multiplied.
Should his skeleton match the mesh after applying the joint info, but before bind matrices? I had assumed that the translation and rotations of the joints would yield something symetrical, and the bind matrices do the final match to the model.
Is there any further info on how this works?
(I’m assuming that the different tags on rotations are app specific, like the jointorientation from Maya - but not at all clear what rotationAxisX is compared to just rotationX.)
(Moved all apps to VC++7, gave up on 6, it was not going to work, so I’ve been porting all remaining components to 7.)
First, I’m sorry you have to spend the extra time moving your apps to VC7 since you couldn’t get the DOM to work in VC6. But newer tools is a good thing, look on the bright side
Now the problem you are having.
No the bones don’t have to be in any specific orientation related to base mesh. The skinning information should move the mesh into the proper orientation based on the bones. The first frame could be any pose the artist exported the document as. Only when creating the skin in a modeling tool the bones should line up with the base mesh (but mathematically it doesn’t have to, it would just be really hard to animate if they don’t line up properly). This is where the inverse bind matrix comes into play. It is used to put the vertex into the bone’s transform space based on that initial skinning pose.
As for the nodes in the scene, the type attribute doesn’t really mean anything important. It is just a hint to tools that this node should be a joint and then the tool can draw the nifty bone thingy in its UI. You could have a skin use any node, even if it isn’t type=JOINT. You should treat it the same as a node type=NODE. The transforms are supposed to be post multiplied in the order that they are present in the document. This applies to all translate, rotate, scale, matrix, and lookat transforms. The sid nodes don’t mean anything in this basic loading. They are only there because some tools transform stacks are really complicated and you can animate different transforms in that stack individually. In the end it still collapses to a single transform matrix used for your calculations and rendering. It is a really bad idea to do any sort of import based on sid names, that would lock you into a single tool which is the exact opposite of COLLADAs main goal to free people from a single tool/toolchain and liberate your data.
Have you loaded the Seymour file into a sample viewer? either the RT or feelingViewer? His animation is a wierd jump where at the apex his pose isn’t very straight or symetrical. Maybe the document was saved in that pose so if you don’t apply animations (the first frame would be him standing normal) you will have that wierd pose.