internal ModelBoneContent(string name, int index, Matrix transform, ModelBoneContent parent) { _name = name; _index = index; _transform = transform; _parent = parent; }
static void Transform(ref BoundingBox bbx, ModelBoneContent bone) { bbx.GetCorners(corners); Matrix m = WorldTransform(bone); Vector3.Transform(corners, ref m, corners); bbx = BoundingBox.CreateFromPoints(corners); }
static Matrix WorldTransform(ModelBoneContent bone) { Matrix m = bone.Transform; while (bone.Parent != null && bone.Parent != bone) { bone = bone.Parent; m = m * WorldTransform(bone); } return(m); }
private void CalculateAbsoluteTransforms(ModelBoneContent bone, Matrix[] transforms) { if (bone.Parent == null) { transforms[bone.Index] = bone.Transform; } else { transforms[bone.Index] = bone.Transform * transforms[bone.Parent.Index]; } foreach (ModelBoneContent child in bone.Children) { CalculateAbsoluteTransforms(child, transforms); } }
protected virtual string GetBoneName(ModelBoneContent mbc) { if (mbc.Name != null) { return(mbc.Name); } string ret; if (!boneNames_.TryGetValue(mbc, out ret)) { ret = String.Format("_GenBone{0}", ++nBonesGenerated_); boneNames_.Add(mbc, ret); } return(ret); }
// The BoneReference type varies in size depending on the number of bones in the model. // If bone count is less than 255 this value is serialized as a Byte, otherwise it is UInt32. // If the reference value is zero the bone is null, otherwise (bone reference - 1) is an index into the model bone list. private void WriteBoneReference(ContentWriter output, int bonesCount, ModelBoneContent bone) { if (bone == null) { output.Write((byte)0); } else if (bonesCount < 255) { output.Write((byte)(bone.Index + 1)); } else { output.Write((UInt32)(bone.Index + 1)); } }
private void WriteBoneReference(ContentWriter output, ModelBoneContent bone, ModelBoneContentCollection bones) { var boneCount = bones != null ? bones.Count : 0; var boneId = bone != null ? bone.Index + 1 : 0; if (boneCount < 255) { output.Write((byte)boneId); } else { output.Write((uint)boneId); } }