private void ConformAnimationBindPoses(Skeleton skeleton, Skeleton conformToSkeleton)
{
foreach (var trackGroup in Root.TrackGroups)
{
for (var i = 0; i < trackGroup.TransformTracks.Count; i++)
{
var track = trackGroup.TransformTracks[i];
var bone = skeleton.GetBoneByName(track.Name);
if (bone == null)
{
string msg = String.Format("Animation track references bone '{0}' that cannot be found in the skeleton.", track.Name);
throw new ExportException(msg);
}
var conformingBone = conformToSkeleton.GetBoneByName(track.Name);
if (conformingBone == null)
{
string msg = String.Format("Animation track references bone '{0}' that cannot be found in the conforming skeleton.", track.Name);
throw new ExportException(msg);
}
var keyframes = track.ToKeyframes();
keyframes.SwapBindPose(bone.OriginalTransform, conformingBone.Transform.ToMatrix4());
var newTrack = TransformTrack.FromKeyframes(keyframes);
newTrack.Flags = track.Flags;
newTrack.Name = track.Name;
newTrack.ParentAnimation = track.ParentAnimation;
trackGroup.TransformTracks[i] = newTrack;
}
}
}