void TransformWriter::add_node_transform(COLLADASW::Node& node, float mat[4][4], float parent_mat[4][4])
{
    float loc[3], rot[3], scale[3];
    float local[4][4];

    if (parent_mat) {
        float invpar[4][4];
        invert_m4_m4(invpar, parent_mat);
        mul_m4_m4m4(local, invpar, mat);
    }
    else {
        copy_m4_m4(local, mat);
    }

    double dmat[4][4];
    UnitConverter *converter = new UnitConverter();
    converter->mat4_to_dae_double(dmat, local);

    TransformBase::decompose(local, loc, rot, NULL, scale);

    if (node.getType() == COLLADASW::Node::JOINT) {
        // XXX Why are joints handled differently ?
        node.addMatrix("transform", dmat);
    }
    else {
        add_transform(node, loc, rot, scale);
    }
}