opengl assimp skeletal node transformation

265 Views Asked by At

if i have a setup where in order to transform a bone, I have to:

node.transform = scale(node.transform, 2, 2, 2)

then

bone_transform = inverse:offset_matrix * 
(node.parent.transform * node.transform) * (inverse:node.parent.transform) * offset_matrix

However this only works properly for bones that doesn't have any children (or the bottom-most in the node hierarchy)..

therefore having trouble when traversing through the bones part..

how would I do this correctly to get the correct bone_transform for all bones..

So if I want to transform any bone anywhere in the hierarchy (using node.transform), it would also adjust all its children bone_transforms correctly..

maybe something like:

mat4 transform = node.transform
while (node.parent != 0) {
  if (node.is_bone) {
     transform = node.parent.transform * node.transform
  }
  node = node.parent
}

or something with node.children recursively?
1

There are 1 best solutions below

0
On

The offset-matrix is already the global transformation for your bone. It contains already all the transformation data from the root down to your current bone.

That is the reason that your code only works for bones without any parent nodes.