I am working on a SceneGraph exporter and I found myself in trouble exporting a node’s transform into a COLLADA-style translate-rotate-scale list. Usually, the elements in the transform list are multiplied in the reversed order to form the final ransform matrix, for example:
<node>
<rotate SID=“r1” />
<translate SID=“t1” />
<scale SID=“s1” />
</node>
would result in the transform matrix s2 * t1 * r1. However, in the COLLADA-book I read that, in the countrary, in COLLADA matrices are being concatenated using the matrix-post multiplicaton, and in column-order. What does that mean? Do I have to multiply them in the order they are present in the <node>? How is my example to be interpreted in a mathematical way? Does “column-order” mean I have to transpose the matrices before multiplying them?
Thanks for the answer Marcus. I now understand how node transformation works in collada. I have one more question though - how do you interpret the rotations and translations as transforms in space? If you translate them into row-major matrices and pre-multiply them, each transform is consecutively applied to the object in its local space, with translations moving it away from the center and rotations rotating it according to its local frame. Is the COLLADA-way (with column-major postmultiplied matrices) the same, but in the reverse order?
In COLLADA, a <node> describes a place (local coordinate system), defined by its transform elements, into which things are instantiated, including more sub-places (nodes).
And here comes the sticking point - if the transform elements are to be read in the reverse order, this means the first transformation is the last one to be applied. How can this be a human-readable format for transformations, if you cannot figuratively imagine the transformation of the object by just reading the text? With row-major matrices you can, because each rotate/translate corresponds to exactly the same action (or passive transform, as described in wikipedia), applied to the object (or its current frame, respectively).
I want to thank Marcus for the help. I solved my problem and I now understand how COLLADA transforms work. I study mathematics and have no problem with linear algebra - it was just the statement in the COLLADA specification that COLLADA is meant to be human readable. For me that means transforms in COLLADA should be readable for someone who has no idea about row-major matrices, or post-order multiplication But now I realize COLLADA is not made for that kind of people