/// <summary> /// When the skeleton changes (for example due to an animation) this /// method will recompute the meshes to adhere to the new skeleton positions. /// </summary> public void ReloadSkeleton() { Skeleton.ComputeBonePositions(Skeleton.RootBone, Matrix.Identity); foreach (var binding in Bindings) { binding.Mesh.Transform(Skeleton.RootBone); } }
/// <summary> /// Clones this skeleton. /// </summary> /// <returns>A Skeleton instance with the same data as this one.</returns> public Skeleton Clone() { var result = new Skeleton(); result.Name = this.Name; result.Bones = new Bone[Bones.Length]; for (int i = 0; i < Bones.Length; i++){ result.Bones[i] = Bones[i].Clone(); } /** Construct tree **/ foreach (var bone in result.Bones) { bone.Children = result.Bones.Where(x => x.ParentName == bone.Name).ToArray(); } result.RootBone = result.Bones.FirstOrDefault(x => x.ParentName == "NULL"); result.ComputeBonePositions(result.RootBone, Matrix.Identity); return result; }
public Skeleton Clone() { var result = new Skeleton(); result.Name = this.Name; result.Bones = new Bone[Bones.Length]; for (int i = 0; i < Bones.Length; i++) { result.Bones[i] = Bones[i].Clone(); } /** Construct tree **/ foreach (var bone in result.Bones) { bone.Children = result.Bones.Where(x => x.ParentName == bone.Name).ToArray(); } result.RootBone = result.Bones.FirstOrDefault(x => x.ParentName == "NULL"); result.ComputeBonePositions(result.RootBone, Matrix.Identity); return(result); }