private static void ParseTracks(BinaryReader reader, int numTracks, odfANIMSection animSection) { for (int trackIdx = 0; trackIdx < numTracks; trackIdx++) { ObjectID id = new ObjectID(reader.ReadBytes(4)); byte[] alwaysZero = reader.ReadBytes(16); int numKeyframes = reader.ReadInt32(); odfTrack track = new odfTrack(numKeyframes); track.BoneFrameId = id; track.AlwaysZero16 = alwaysZero; for (int i = 0; i < numKeyframes; i++) { odfKeyframe keyframe = new odfKeyframe(); keyframe.Index = reader.ReadSingle(); keyframe.Unknown1 = reader.ReadInt32(); keyframe.FastTranslation = reader.ReadVector3(); keyframe.Unknown2 = reader.ReadInt32(); keyframe.FastRotation = reader.ReadVector3(); keyframe.Unknown3 = reader.ReadInt32(); keyframe.FastScaling = reader.ReadVector3(); keyframe.Matrix = reader.ReadMatrix(); keyframe.ExtraFastRotation = reader.ReadQuaternion(); keyframe.AlwaysZero88 = reader.ReadBytes(88); track.KeyframeList.Add(keyframe); } animSection.AddChild(track); } }
public static void odfKeyframe(odfKeyframe keyframe) { keyframe.Unknown1 = 1; keyframe.Unknown2 = 1; keyframe.Unknown3 = 1; keyframe.AlwaysZero88 = new byte[88]; }
public static List <odfKeyframe> ConvertTrack(ImportedAnimationKeyframe[] iKeyframes) { List <odfKeyframe> keyframes = new List <odfKeyframe>(iKeyframes.Length); for (int i = 0; i < iKeyframes.Length; i++) { ImportedAnimationKeyframe iKeyframe = iKeyframes[i]; if (iKeyframe == null) { continue; } odfKeyframe keyframe = new odfKeyframe(); keyframes.Add(keyframe); odf.CreateUnknowns(keyframe); keyframe.Index = i; keyframe.FastTranslation = iKeyframe.Translation; // keyframe.FastRotation = FbxUtility.QuaternionToEuler(iKeyframe.Rotation); not used, always 0 keyframe.FastScaling = iKeyframe.Scaling; keyframe.ExtraFastRotation = iKeyframe.Rotation; keyframe.Matrix = Matrix.Scaling(iKeyframe.Scaling) * Matrix.RotationQuaternion(iKeyframe.Rotation) * Matrix.Translation(iKeyframe.Translation); } keyframes.TrimExcess(); return(keyframes); }
public static ImportedAnimationKeyframe[] ConvertTrack(List <odfKeyframe> keyframes) { int start = (int)keyframes[0].Index; int end = (int)keyframes[keyframes.Count - 1].Index; ImportedAnimationKeyframe[] iKeyframes = new ImportedAnimationKeyframe[end - start + 1]; for (int i = 0; i < keyframes.Count; i++) { odfKeyframe keyframe = keyframes[i]; ImportedAnimationKeyframe iKeyframe = new ImportedAnimationKeyframe(); iKeyframes[(int)keyframe.Index - start] = iKeyframe; iKeyframe.Scaling = keyframe.FastScaling; iKeyframe.Rotation = keyframe.ExtraFastRotation; iKeyframe.Translation = keyframe.FastTranslation; } return(iKeyframes); }
public static void CreateUnknowns(odfKeyframe keyframe) { UnknownDefaults.odfKeyframe(keyframe); }