我正在尝试在两种不同的骨架格式之间进行转换。我有一个等级骨架。
现在采用一种格式,给定节点的矩阵由(DirectX)计算(反复, 从底部节点到顶部,其中matScale / matRotate / matTranslationFromParent是特定节点SRT):
appliedMatrices = appliedMatrices * matScale * matRotate * matTranslationFromParent;
但我需要将其转换为使用的格式(从底部节点到顶部,其中translateIn是(ParentPos - EndPartPos)的向量减法,并且转换为(EndPartPos - ParentPos),以及matScale / matRotate / matTranslationFromParent是特定节点SRT):
appliedMatrices = appliedMatrices * matScale * matTranslationOut * matRotate * matTranslationIn * matTranslationFromParent;
如何从第一种格式转换为第二种骨架格式(又返回)?
答案 0 :(得分:0)
如果我们比较两个版本,我们会发现以下两个部分需要匹配:
matRotate1 * matTranslationFromParent1
= matTranslationOut * matRotate2 * matTranslationIn * matTranslationFromParent2
由于matRotate1
和matRotate2
是唯一的轮换,因此这两者必须相等。所以这很简单:
matRotate1 = matRotate2
然后,对于两次转换,只留下一个未知数:
//conversion 1 -> 2
matTranslationFromParent2 = (matTranslationOut * matRotate2 * matTranslationIn)^-1 * matRotate1 * matTranslationFromParent1
//conversion 2 -> 1
matTranslationFromParent1 = matRotate1^-1 * matTranslationOut * matRotate2 * matTranslationIn * matTranslationFromParent2
如果性能至关重要,则只能对平移向量而不是整个矩阵进行这些计算。