Vector3F SkeletonSubspaceDeformer::combine(unsigned idx)
{
    const unsigned nj = numBindJoints(idx);
    unsigned j;
    Vector3F q;
    Matrix44F space;
    for(j = 0; j < nj; j++) {
        space = bindS(idx, j);
        q += space.transform(bindP(idx, j)) * bindW(idx, j);
    }
    
    return q;
}
void SkeletonSubspaceDeformer::calculateSubspaceP()
{
	unsigned i, j, n, nj, vstart;
	Matrix44F spaceInv;
	Vector3F p;
	for(i = 0; i < numVertices(); i++) {
		p = getDeformedP()[i];
		n = m_jointIds[i]._ndim;
		nj = n - 1;
		vstart = m_jointIds[i][nj];
		
		for(j = 0; j < nj; j++) {
			SkeletonJoint * joint = m_skeleton->jointByIndex(m_jointIds[i][j]);
			spaceInv = joint->worldSpace();
			spaceInv.inverse();
			m_subspaceP[vstart + j] = spaceInv.transform(p);
		}
	}
}