public void Apply(VBN bone) { for (int i = 0; i < nodes.Count; i++) { List <AnimType> used = new List <AnimType>(); Bone b = bone.bones[i]; Vector3 erot = ANIM.quattoeul(b.rot); foreach (DATAnimTrack track in nodes[i]) { KeyNode node = track.keys[0]; if (Debug) { Console.WriteLine("Bone " + i + " " + track.type + " " + node.value); } switch (track.type) { case AnimType.XPOS: b.pos.X = node.value; break; case AnimType.YPOS: b.pos.Y = node.value; break; case AnimType.ZPOS: b.pos.Z = node.value; break; case AnimType.XROT: erot.X = node.value; break; case AnimType.YROT: erot.Y = node.value; break; case AnimType.ZROT: erot.Z = node.value; break; } } b.rot = VBN.FromEulerAngles(erot.Z, erot.Y, erot.X); } bone.update(); }
public static void Save(Animation anim, VBN skeleton, String fname) { using (System.IO.StreamWriter file = new System.IO.StreamWriter(fname)) { file.WriteLine("version 1"); file.WriteLine("nodes"); foreach (Bone b in skeleton.bones) { file.WriteLine(skeleton.bones.IndexOf(b) + " \"" + b.Text + "\" " + b.parentIndex); } file.WriteLine("end"); file.WriteLine("skeleton"); anim.SetFrame(0); for (int i = 0; i <= anim.frameCount; i++) { anim.NextFrame(skeleton); file.WriteLine("time " + i); foreach (Animation.KeyNode sb in anim.bones) { Bone b = skeleton.getBone(sb.Text); if (b == null) { continue; } Vector3 eul = ANIM.quattoeul(b.rot); file.WriteLine(skeleton.bones.IndexOf(b) + " " + b.pos.X + " " + b.pos.Y + " " + b.pos.Z + " " + eul.X + " " + eul.Y + " " + eul.Z); } } file.WriteLine("end"); file.Close(); } }
public void SetKeyFromBone(float frame, Bone bone) { Vector3 rot = ANIM.quattoeul(bone.rot); if (rot.X != bone.rotation[0] || rot.Y != bone.rotation[1] || rot.Z != bone.rotation[2]) { xrot.GetKeyFrame(frame).Value = bone.rot.X; yrot.GetKeyFrame(frame).Value = bone.rot.Y; zrot.GetKeyFrame(frame).Value = bone.rot.Z; wrot.GetKeyFrame(frame).Value = bone.rot.W; } if (bone.pos.X != bone.position[0] || bone.pos.Y != bone.position[1] || bone.pos.Z != bone.position[2]) { xpos.GetKeyFrame(frame).Value = bone.pos.X; ypos.GetKeyFrame(frame).Value = bone.pos.Y; zpos.GetKeyFrame(frame).Value = bone.pos.Z; } if (bone.sca.X != bone.scale[0] || bone.sca.Y != bone.scale[1] || bone.sca.Z != bone.scale[2]) { xsca.GetKeyFrame(frame).Value = bone.sca.X; ysca.GetKeyFrame(frame).Value = bone.sca.Y; zsca.GetKeyFrame(frame).Value = bone.sca.Z; } }