【发布时间】:2015-01-03 04:04:39
【问题描述】:
对于使用 colladas 的骨骼动画,我需要在 2 个矩阵之间进行线性插值。我在某处看到可以使用四元数在矩阵之间进行插值,但这仅适用于旋转分量,并且我还需要保留变换。这是我的代码,它可以工作,除了翻译部分:
float total = (orderedBones[i]->Animation->keyFrames[nextKeyFrame] - orderedBones[i]->Animation->keyFrames[nextKeyFrame - 1]) * 100.0;
float progress = orderedBones[i]->Animation->accumTime - orderedBones[i]->Animation->keyFrames[nextKeyFrame - 1] * 100.0;
float interpolation = progress / total;
glm::quat firstQuat = glm::quat_cast(orderedBones[i]->Animation->Matrices[nextKeyFrame - 1]);
glm::quat secondQuat = glm::quat_cast(orderedBones[i]->Animation->Matrices[nextKeyFrame]);
glm::quat finalQuat = glm::slerp(firstQuat, secondQuat, interpolation);
orderedBones[i]->Animation->interpoltaedMatrix = glm::mat4_cast(finalQuat);
有什么办法可以做到吗?
【问题讨论】:
-
我建议添加标签
quaternion(单数) -
@SeverinPappadeux 添加:)
-
@SeverinPappadeux collada 是一种能够存储骨骼动画数据的 3D 文件格式。它相当无关紧要,但我想我还是会提到它。
-
什么样的矩阵?对于一般矩阵,线性插值就是 (1-t)A+tB。
-
@user612313 它们是 4x4 变换矩阵。我已经解决了问题并发布并回答以供将来参考。
标签: matrix interpolation quaternions