Ejemplo n.º 1
0
        private void UpdateOrientation()
        {
            Quatf q = orientation.GetRotation();

            q.Normalize();
            orientation = Mat3f.CreateRotation(q);
        }
Ejemplo n.º 2
0
        public Quatf Normalized()
        {
            Quatf copy = this;

            copy.Normalized();
            return(copy);
        }
Ejemplo n.º 3
0
    /// <summary>
    /// Converts a plain C# Quatf to a Unity Quaternion.
    /// </summary>
    /// <returns>The quaternion as a Unity Quaternion.</returns>
    /// <param name="size">The quaternion as a C# Quatf.</param>
    public static Quaternion ToQuaternion(this Quatf quat, bool rhToLh = true)
    {
        Quaternion q = new Quaternion(quat.x, quat.y, quat.z, quat.w);

        if (rhToLh)
        {
            q.x = -q.x;
            q.y = -q.y;
        }

        return(q);
    }
Ejemplo n.º 4
0
        public void GetAngleAxis(out Vec3f axis, out float angle)
        {
            Quatf q = this;

            if (MathUtils.Absolute(q.w) > 1.0f)
            {
                q.Normalize();
            }

            angle = 2.0f * (float)MathUtils.Acos(q.w);

            var den = (float)MathUtils.Sqrt(1.0f - (q.w * q.w));

            if (den > 0.0001f)
            {
                axis = q.XYZ / den;
            }
            else
            {
                // This occurs when the angle is zero.
                // Not a problem: just set an arbitrary normalized axis.
                axis = Vec3f.Up;
            }
        }