Exemplo n.º 1
0
        private static Matrix4 GetDefaultBoneTransform(Bone b)
        {
            var m = Matrix4.Identity;

            while (b != null)
            {
                var q         = OpenTkExtensions.QuaternionFromEulerRotation(b.DefaultAngles);
                var mat       = Matrix4.CreateFromQuaternion(q);
                var transform = mat * Matrix4.CreateTranslation(b.DefaultPosition);
                m *= transform;
                //m *= QuaternionF.EulerAngles(b.DefaultAngles).GetMatrix().Translate(b.DefaultPosition);
                b = b.Parent;
            }
            return(m);
        }
Exemplo n.º 2
0
 public Bone(int boneIndex, int parentIndex, Bone parent, string name,
             Vector3 defaultPosition, Vector3 defaultAngles,
             Vector3 defaultPositionScale, Vector3 defaultAnglesScale)
 {
     BoneIndex            = boneIndex;
     ParentIndex          = parentIndex;
     Parent               = parent;
     Name                 = name;
     DefaultPosition      = defaultPosition;
     DefaultAngles        = defaultAngles;
     DefaultPositionScale = defaultPositionScale;
     DefaultAnglesScale   = defaultAnglesScale;
     Transform            = Matrix4.CreateFromQuaternion(OpenTkExtensions.QuaternionFromEulerRotation(DefaultAngles)) * Matrix4.CreateTranslation(defaultPosition);
     if (parent != null)
     {
         Transform *= parent.Transform;
     }
 }
Exemplo n.º 3
0
        public Matrix4 GetAnimationTransform(Bone b, bool transformBones, bool applyDefaults)
        {
            var m = transformBones ? Matrix4.Identity : GetDefaultBoneTransform(b).Inverted();

            while (b != null)
            {
                var ang = Bones[b.BoneIndex].Angles;
                var pos = Bones[b.BoneIndex].Position;
                if (applyDefaults)
                {
                    ang *= OpenTkExtensions.QuaternionFromEulerRotation(b.DefaultAngles);
                    pos += b.DefaultPosition;
                }
                m *= Matrix4.CreateFromQuaternion(ang) * Matrix4.CreateTranslation(pos);
                //var test = Bones[b.BoneIndex].Angles * QuaternionF.EulerAngles(b.DefaultAngles);
                //m *= test.GetMatrix().Translate(Bones[b.BoneIndex].Position + b.DefaultPosition);
                //m *= Bones[b.BoneIndex].Angles.GetMatrix().Translate(Bones[b.BoneIndex].Position);
                b = b.Parent;
            }
            return(m);
        }