Beispiel #1
0
        /// <summary>
        /// Updates the current bone transform flags.
        /// These flags determine what matrices can be ignored for matrix updating.
        /// </summary>
        public void UpdateTransformFlags()
        {
            BoneFlagsTransform flags = 0;

            //SRT checks to update matrices
            if (this.Position == Vector3.Zero)
            {
                flags |= BoneFlagsTransform.TranslateZero;
            }
            if (this.Scale == Vector3.One)
            {
                flags |= BoneFlagsTransform.ScaleOne;
                flags |= BoneFlagsTransform.ScaleVolumeOne;
            }
            if (this.Rotation == Quaternion.Identity)
            {
                flags |= BoneFlagsTransform.RotateZero;
            }

            //Extra scale flags
            if (this.Scale.X == this.Scale.Y && this.Scale.X == this.Scale.Z)
            {
                flags |= BoneFlagsTransform.ScaleUniform;
            }

            BoneData.FlagsTransform = flags;
        }
        private static BoneFlagsTransform SetBoneFlags(STBone bn)
        {
            BoneFlagsTransform flags = BoneFlagsTransform.None;

            if (bn.Position == OpenTK.Vector3.Zero)
            {
                flags |= BoneFlagsTransform.TranslateZero;
            }
            if (bn.EulerRotation == OpenTK.Vector3.Zero)
            {
                flags |= BoneFlagsTransform.RotateZero;
            }
            if (bn.Scale == OpenTK.Vector3.One)
            {
                flags |= BoneFlagsTransform.ScaleOne;
            }
            return(flags);
        }