コード例 #1
0
ファイル: Transform.cs プロジェクト: katoun/KeyEngineSharp
        public override void Update()
        {
            if (isDirty)
            {
                if (parent != null)
                {
                    position = parent.localPosition + parent.localRotation * (localPosition * parent.localScale);
                    rotation = parent.localRotation * localRotation;
                    scale    = parent.localScale * localScale;

                    localEulerAngles = Core.Quaternion.EulerAngles(localRotation);
                    eulerAngles      = Core.Quaternion.EulerAngles(rotation);
                }
                else
                {
                    position = localPosition;
                    rotation = localRotation;
                    scale    = localScale;

                    localEulerAngles = Core.Quaternion.EulerAngles(localRotation);
                    eulerAngles      = localEulerAngles;
                }

                isDirty = false;
            }
        }
コード例 #2
0
ファイル: Transform.cs プロジェクト: katoun/KeyEngineSharp
        public void Rotate(Core.Vector3 eulerAngles, SpaceType relativeTo = SpaceType.Local)
        {
            switch (relativeTo)
            {
            case SpaceType.Local:
            {
                localRotation *= Core.Quaternion.EulerAngles(eulerAngles);
            }
            break;

            case SpaceType.World:
            {
                if (parent != null)
                {
                    Core.Quaternion scaleAdjust = new Core.Quaternion(parent.localScale.Y * parent.localScale.Z, parent.localScale.X * parent.localScale.Z, parent.localScale.X * parent.localScale.Y, 0f);
                    localRotation *= (parent.localRotation.conjugate * Core.Quaternion.EulerAngles(eulerAngles)) * scaleAdjust;
                }
                else
                {
                    localRotation *= Core.Quaternion.EulerAngles(eulerAngles);
                }
            }
            break;
            }

            isDirty = true;
        }
コード例 #3
0
ファイル: FoxUtils.cs プロジェクト: youarebritish/FoxKit
        /// <summary>
        /// Converts a Fox Engine Quaternion to a Unity Quaternion.
        /// </summary>
        /// <param name="foxQuat">The Fox Engine Quaternion.</param>
        /// <returns>The Unity Quaternion.</returns>
        public static Quaternion FoxToUnity(Core.Quaternion foxQuat)
        {
            var angle           = 0.0f;
            var axis            = Vector3.zero;
            var unityQuaternion = new Quaternion(foxQuat.X, foxQuat.Y, foxQuat.Z, foxQuat.W);

            unityQuaternion.ToAngleAxis(out angle, out axis);
            axis.x = -axis.x;

            var newQuat = Quaternion.AngleAxis(-angle, axis);

            return(new Quaternion(newQuat.x, newQuat.y, newQuat.z, newQuat.w));
        }
コード例 #4
0
ファイル: Transform.cs プロジェクト: katoun/KeyEngineSharp
        void SetGlobalRotation(Core.Quaternion value)
        {
            if (parent != null)
            {
                Core.Quaternion scaleAdjust = new Core.Quaternion(parent.localScale.Y * parent.localScale.Z, parent.localScale.X * parent.localScale.Z, parent.localScale.X * parent.localScale.Y, 0f);
                localRotation = (parent.localRotation.conjugate * value) * scaleAdjust;
            }
            else
            {
                localRotation = value;
            }

            isDirty = true;
        }