hierarchical rotations of nodes
I have implemented a viewer opengl that can parse and render a file with the collada format. I have a nasty bug in my viewer: it seems that the rotations are not implemented correctly. Here is what I do:
- I store all the rotations for each instance inside a stl vector ( taking into
account the hierarchy of nodes, i.e. the first rotation in the stl vector corresponds to
the first rotation met in the nodes hierarchy)
- Then, I take each rotations one after the other, transform it into a quaternion and
multiply it by the quaternion obtained from the previous multiplication.
Here follows a simple example:
for the following lines:
<scene id="hotel_circus.max" name="hotel_circus.max">
<node id="hotel" name="hotel">
<translate>149.743 -86.4957 56.66 </translate>
<rotate>0 0 -1 -90</rotate>
<node id="Obst_pilliers" name="Obst_pilliers">
<translate>3.72179 38.3972 -40.7832 </translate>
<rotate>0 0 1 -180</rotate>
The instance "Obst_pilliers" has first a rotation of -90 degrees and then a rotation of -180 degrees around z axis.
I ttransform the axis angle rotations into quaternions and multiply the first one by the second one.
Once I have the resulting quaternion, I transform it into a 4x4 matrix that I multiply to the object matrix.
Is this approach wrong? How should multiple hierarchical rotations be applied to an object? Thanks for helping me!