internal ModelBoneContent(string name, int index, Matrix transform, ModelBoneContent parent)
 {
     _name      = name;
     _index     = index;
     _transform = transform;
     _parent    = parent;
 }
 internal ModelBoneContent(string name, int index, Matrix transform, ModelBoneContent parent)
 {
     _name = name;
     _index = index;
     _transform = transform;
     _parent = parent;
 }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
     }
 }
Exemple #6
0
        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);
        }
Exemple #7
0
 // 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);
            }
        }