检查动画数据的帧率是否正确,并按照正确的方式计算动画的时间戳。
示例代码:
// 获取动画 const aiScene* scene = importer.ReadFile("model.fbx", aiProcess_Triangulate | aiProcess_FlipUVs | aiProcess_GenNormals | aiProcess_LimitBoneWeights);
// 获取第一个动画数据 aiAnimation* animation = scene->mAnimations[0];
// 获取动画帧率 float animationTicksPerSecond = animation->mTicksPerSecond != 0 ? animation->mTicksPerSecond : 25.0f; float animationTimeInSeconds = animation->mDuration / animationTicksPerSecond;
// 计算动画的时间戳 float timeInSeconds = fmod(glfwGetTime(), animationTimeInSeconds);
// 获取骨骼变换 aiMatrix4x4 boneTransformation = animation->mChannels[channelIndex]->mNodeAnimations[boneIndex]->mTransformationKeys[frameIndex].mValue;
// 应用骨骼变换 aiMatrix4x4 finalTransformation = parentTransform * boneTransformation;
// 更新骨骼动画矩阵 boneMatrices[boneIndex] = globalInverseTransform * finalTransformation * boneOffset;