private void UpdateOrientation() { Quatf q = orientation.GetRotation(); q.Normalize(); orientation = Mat3f.CreateRotation(q); }
public Quatf Normalized() { Quatf copy = this; copy.Normalized(); return(copy); }
/// <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); }
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; } }