I am trying to write a Collada parser and renderer in C++ with OpenGL, and have got geometry and texturing working so far.
I have also wrote a parser for the skeleton in the Collada file, and want to render it in its static shape, before I go about and implement animation. Is this possible or will I need to parse the animation library as well? What do I need to do to convert collada's matrices into a form OpenGL will understand?
So far I have tried looping through the main bone, and through its children and drawing lines between all the positions, but my understanding is not too great on how each matrix in the Collada file relates to its parent and I end up with a mess of lines which I can make no sense of.
Typically a skeleton is represented as a heirarchy of transforms. Each matrix is multiplied by all parent transforms, back up to the root.
The point you want to draw for a joint is (0,0,0,1) transformed by that joint's transform multiplied by the multiplication of ALL of its parent transforms. You might need to reverse the order depending on how you've set up matrices.
So, for a bone with matrix X, You'd draw a line from (Parent of Parent of X)*(Parent of X)(0,0,0,1) to (Parent of parent of X)*(Parent of X)*X*(0,0,0,1)
I am actually parsing the Collada file into my own structure, which also has methods to read/write itself from the disk from a binary file format I have designed. I have so far got the scene, library_visual_scenes and library_visual_scenes parsed, which I believe would be enough to get a static skeleton to render.
If I had the 16 number matrix, for example from one of my own models:
[source lang="xml"]<matrix>0.9971483 0.07496392 -0.008701464 2.835394 -0.0749609 0.9971862 6.72192e-4 -0.2716522 0.00872737 -1.80052e-5 0.9999619 5.72205e-6 0 0 0 1</matrix>[/source]
which components make up position, rotation etc, is what is really confusing me, as I cannot seem to find what each component means, or how I can give it to OpenGL to simply draw.