opengl assimp backbone 节点变换

iszxjhcz  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(155)

如果我有一个设置,为了变换骨骼,我必须:

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

然后

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

但是,这仅适用于没有任何子对象(或节点层次中最底层的对象)的骨骼。
因此在穿过骨头部分时有困难。
如何正确执行此操作以获得所有骨骼的正确bone_transform ..
因此,如果我想变换层次中任何位置的任何骨骼(使用node.transform),它也会正确地调整其所有子骨骼bone_transforms。
也许是这样的:

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?
v2g6jxz6

v2g6jxz61#

偏移矩阵已经是骨骼的全局变换。它已经包含了从根到当前骨骼的所有变换数据。
这就是代码仅适用于没有任何父节点的骨骼的原因。

相关问题