public ComputeBonePositions ( |
||
bone | The bone to start with, should always be the ROOT bone. | |
world | Matrix | A world matrix to use in the calculation. |
return | void |
/// <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); SkelBones = new Matrix[Skeleton.Bones.Length]; for (int i = 0; i < Skeleton.Bones.Length; i++) { SkelBones[i] = Skeleton.Bones[i].AbsoluteMatrix; } }
/// <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; }
/// <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); }