/// <summary> /// Creates a 3x3 matrix representing the orientation stored in the quaternion. /// </summary> /// <param name="quaternion">FixQuaternion to use to create a matrix.</param> /// <returns>FixMatrix representing the quaternion's orientation.</returns> public static fix3x3 CreateFromQuaternion(fixQuaternion quaternion) { fix3x3 result; CreateFromQuaternion(quaternion, out result); return(result); }
/// <summary> /// Creates a 3x3 matrix representing the orientation stored in the quaternion. /// </summary> /// <param name="quaternion">FixQuaternion to use to create a matrix.</param> /// <param name="result">FixMatrix representing the quaternion's orientation.</param> public static void CreateFromQuaternion(fixQuaternion quaternion, out fix3x3 result) { fix qX2 = quaternion.x + quaternion.x; fix qY2 = quaternion.y + quaternion.y; fix qZ2 = quaternion.z + quaternion.z; fix XX = qX2 * quaternion.x; fix YY = qY2 * quaternion.y; fix ZZ = qZ2 * quaternion.z; fix XY = qX2 * quaternion.y; fix XZ = qX2 * quaternion.z; fix XW = qX2 * quaternion.w; fix YZ = qY2 * quaternion.z; fix YW = qY2 * quaternion.w; fix ZW = qZ2 * quaternion.w; result.M11 = F64.C1 - YY - ZZ; result.M21 = XY - ZW; result.M31 = XZ + YW; result.M12 = XY + ZW; result.M22 = F64.C1 - XX - ZZ; result.M32 = YZ - XW; result.M13 = XZ - YW; result.M23 = YZ + XW; result.M33 = F64.C1 - XX - YY; }
/// <summary> /// Creates a rotation matrix from a quaternion. /// </summary> /// <param name="quaternion">FixQuaternion to convert.</param> /// <returns>Rotation matrix created from the quaternion.</returns> public static fix4x4 CreateFromQuaternion(fixQuaternion quaternion) { fix4x4 toReturn; CreateFromQuaternion(quaternion, out toReturn); return(toReturn); }
/// <summary> /// Creates a transform matrix with the given positon, rotation and scale /// </summary> public static fix4x4 CreateTRS(fix3 position, fixQuaternion rotation, fix3 scale) { fix4x4 result; CreateTRS(position, rotation, scale, out result); return(result); }
/// <summary> /// Creates a transform matrix with the given positon, rotation and scale /// </summary> public static void CreateTRS(fix3 position, fixQuaternion rotation, fix3 scale, out fix4x4 worldMatrix) { fix4x4 mat; // Scale CreateScale(scale, out worldMatrix); // Rotation CreateFromQuaternion(rotation, out mat); worldMatrix *= mat; // Translation CreateTranslation(position, out mat); worldMatrix *= mat; }
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { SerializedProperty xProp = property.FindPropertyRelative(nameof(Quaternion.x)).FindPropertyRelative(nameof(fix.RawValue)); SerializedProperty yProp = property.FindPropertyRelative(nameof(Quaternion.y)).FindPropertyRelative(nameof(fix.RawValue)); SerializedProperty zProp = property.FindPropertyRelative(nameof(Quaternion.z)).FindPropertyRelative(nameof(fix.RawValue)); SerializedProperty wProp = property.FindPropertyRelative(nameof(Quaternion.w)).FindPropertyRelative(nameof(fix.RawValue)); fix xVal; fix yVal; fix zVal; fix wVal; xVal.RawValue = xProp.longValue; yVal.RawValue = yProp.longValue; zVal.RawValue = zProp.longValue; wVal.RawValue = wProp.longValue; fixQuaternion oldQuat = new fixQuaternion(xVal, yVal, zVal, wVal); // Using BeginProperty / EndProperty on the parent property means that // prefab override logic works on the entire property. EditorGUI.BeginProperty(position, label, property); // Editor Field Vector3 oldEuler = oldQuat.ToUnityQuat().eulerAngles; Vector3 newEuler = EditorGUI.Vector3Field(position, label, oldEuler); // Change ? if (oldEuler != newEuler) { fixQuaternion newQuat = Quaternion.Euler(newEuler.x, newEuler.y, newEuler.z).ToFixQuat(); xProp.longValue = newQuat.x.RawValue; yProp.longValue = newQuat.y.RawValue; zProp.longValue = newQuat.z.RawValue; wProp.longValue = newQuat.w.RawValue; } EditorGUI.EndProperty(); }
public static fix angle2d(fixQuaternion v) { return(fixQuaternion.EulerZ(v)); }
public static Quaternion ToUnityQuat(this fixQuaternion fixQuat) { return(new Quaternion((float)fixQuat.x, (float)fixQuat.y, (float)fixQuat.z, (float)fixQuat.w)); }