vault backup: 2023-11-07 19:30:47
This commit is contained in:
@@ -91,12 +91,16 @@ TargetRootTransform.SetRotation(Rotation);
|
||||
遍历所有骨骼链,并执行FChainEncoderFK::EncodePose()与FChainDecoderFK::DecodePose()。
|
||||
|
||||
FChainEncoderFK::EncodePose():
|
||||
1. 遍历所有骨骼链,根据骨骼链Index得到BoneIndex,之后将对应骨骼的WorldSpace Transform赋予到对应骨骼链Index的CurrentGlobalTransforms中。
|
||||
2. Resize CurrentLocalTransforms,其长度与SourceBoneIndices相同。
|
||||
3. FillTransformsWithLocalSpaceOfChain()
|
||||
1. 遍历所有骨骼,复制SourceGlobalPose到**CurrentGlobalTransforms**
|
||||
2. Resize CurrentLocalTransforms
|
||||
3. FillTransformsWithLocalSpaceOfChain() 转换成LocalSpace数据。
|
||||
1. 遍历所有骨骼链,取得对应骨骼的Index以及父骨骼Index。(跳过根骨骼)
|
||||
2. 计算相对Transform后放入对应ChainIndex的OutLocalTransforms中。
|
||||
4. 根据ChainParentBoneIndex,将父骨骼Transform赋予给ChainParentCurrentGlobalTransform。
|
||||
|
||||
FChainDecoderFK::DecodePose():
|
||||
1. 更新IntermediateParentIndices的所有Index的父骨骼WorldSpace Transform。用来更新重定向后哪些不属于骨骼链的骨骼的WorldSpace Transform。(在InitializeBoneChainPairs() -> InitializeIntermediateParentIndices()中初始化)
|
||||
2. 从根骨骼开始重定向,以保证最后结果不会发生偏差。计算了Source/Target InitialDelta、Target 根骨骼 Transform后,将两者相乘,最后应用给所有Source骨骼链。
|
||||
3. 如果禁用FK重定向,则返回当前WorldSpace Transform并且return。
|
||||
4.
|
||||
|
||||
|
Reference in New Issue
Block a user