Пример #1
0
    /// <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);
    }
Пример #2
0
    /// <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;
    }
Пример #3
0
    /// <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);
    }
Пример #4
0
    /// <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);
    }
Пример #5
0
    /// <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;
    }
Пример #6
0
    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();
    }
Пример #7
0
 public static fix angle2d(fixQuaternion v)
 {
     return(fixQuaternion.EulerZ(v));
 }
Пример #8
0
 public static Quaternion ToUnityQuat(this fixQuaternion fixQuat)
 {
     return(new Quaternion((float)fixQuat.x, (float)fixQuat.y, (float)fixQuat.z, (float)fixQuat.w));
 }