I know how to read skinning data and animation data from fbx. what i dont know is how to combine those data to do animation. can someone help me? I'm following the article, https://www.gamedev.net/tutorials/_/technical/graphics-programming-and-theory/how-to-work-with-fbx-sdk-r3582/
inStream << "\t<skeleton count='" << mSkeleton.mJoints.size() << "'>" << std::endl;
for (unsigned int i = 0; i < mSkeleton.mJoints.size(); ++i)
{
inStream << "\t\t<joint id='" << i << "' name='" << mSkeleton.mJoints[i].mName << "' parent='" << mSkeleton.mJoints[i].mParentIndex << "'>\n";
inStream << "\t\t\t";
FbxVector4 translation = mSkeleton.mJoints[i].mGlobalBindposeInverse.GetT();
FbxVector4 rotation = mSkeleton.mJoints[i].mGlobalBindposeInverse.GetR();
translation.Set(translation.mData[0], translation.mData[1], -translation.mData[2]);
rotation.Set(-rotation.mData[0], -rotation.mData[1], rotation.mData[2]);
mSkeleton.mJoints[i].mGlobalBindposeInverse.SetT(translation);
mSkeleton.mJoints[i].mGlobalBindposeInverse.SetR(rotation);
FbxMatrix out = mSkeleton.mJoints[i].mGlobalBindposeInverse;
Utilities::WriteMatrix(inStream, out.Transpose(), true);
inStream << "\t\t</joint>\n";
}
inStream << "\t</skeleton>\n";
inStream << "\t<animations>\n";
inStream << "\t\t<animation name='" << mAnimationName << "' length='" << mAnimationLength << "'>\n";
for (unsigned int i = 0; i < mSkeleton.mJoints.size(); ++i)
{
inStream << "\t\t\t" << "<track id = '" << i << "' name='" << mSkeleton.mJoints[i].mName << "'>\n";
Keyframe* walker = mSkeleton.mJoints[i].mAnimation;
while(walker)
{
inStream << "\t\t\t\t" << "<frame num='" << walker->mFrameNum - 1 << "'>\n";
inStream << "\t\t\t\t\t";
FbxVector4 translation = walker->mGlobalTransform.GetT();
FbxVector4 rotation = walker->mGlobalTransform.GetR();
translation.Set(translation.mData[0], translation.mData[1], -translation.mData[2]);
rotation.Set(-rotation.mData[0], -rotation.mData[1], rotation.mData[2]);
walker->mGlobalTransform.SetT(translation);
walker->mGlobalTransform.SetR(rotation);
FbxMatrix out = walker->mGlobalTransform;
Utilities::WriteMatrix(inStream, out.Transpose(), true);
inStream << "\t\t\t\t" << "</frame>\n";
walker = walker->mNext;
}
inStream << "\t\t\t" << "</track>\n";
}