我正在用动画加载网格物体,但我的问题是动画不正确,骨骼是变形变形。
在这部分代码中,我将矩阵相乘:
UINT numBones = mBoneOffsets.size();
std::vector<XMFLOAT4X4> toParentTransforms(numBones);
auto clip = mAnimations.find(clipName);
clip->second.Interpolate(timePos, toParentTransforms);
std::vector<XMFLOAT4X4> toRootTransforms(numBones);
toRootTransforms[0] = toParentTransforms[0];
for(UINT i = 1; i < numBones; ++i)
{
XMMATRIX toParent = XMLoadFloat4x4(&toParentTransforms[i]);
int parentIndex = mBoneHierarchy[i];
XMMATRIX parentToRoot = XMLoadFloat4x4(&toRootTransforms[parentIndex]);
XMMATRIX toRoot = XMMatrixMultiply(toParent, parentToRoot);
toRoot = XMMatrixMultiply(toRoot, m_boneTransforms[i]);
XMStoreFloat4x4(&toRootTransforms[i], toRoot);
}
for(UINT i = 0; i < numBones; ++i)
{
XMMATRIX offset = XMLoadFloat4x4(&mBoneOffsets[i]);
XMMATRIX toRoot = XMLoadFloat4x4(&toRootTransforms[i]);
XMMATRIX finalTransform = XMMatrixMultiply(offset, toRoot);
XMStoreFloat4x4(&finalTransforms[i], XMMatrixTranspose(finalTransform));
}enter code here
toParentTransforms包含每个骨骼的关键帧的插值。
我不确定这部分代码中是否有错误。
谢谢。