Move EulerOrder enum to math_defs.h and global scope
This commit is contained in:
parent
39cece382d
commit
8556fdd4bc
16 changed files with 105 additions and 127 deletions
|
|
@ -453,7 +453,7 @@ void Basis::get_rotation_axis_angle_local(Vector3 &p_axis, real_t &p_angle) cons
|
|||
|
||||
Vector3 Basis::get_euler(EulerOrder p_order) const {
|
||||
switch (p_order) {
|
||||
case EULER_ORDER_XYZ: {
|
||||
case EulerOrder::XYZ: {
|
||||
// Euler angles in XYZ convention.
|
||||
// See https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix
|
||||
//
|
||||
|
|
@ -488,7 +488,7 @@ Vector3 Basis::get_euler(EulerOrder p_order) const {
|
|||
}
|
||||
return euler;
|
||||
} break;
|
||||
case EULER_ORDER_XZY: {
|
||||
case EulerOrder::XZY: {
|
||||
// Euler angles in XZY convention.
|
||||
// See https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix
|
||||
//
|
||||
|
|
@ -517,7 +517,7 @@ Vector3 Basis::get_euler(EulerOrder p_order) const {
|
|||
}
|
||||
return euler;
|
||||
} break;
|
||||
case EULER_ORDER_YXZ: {
|
||||
case EulerOrder::YXZ: {
|
||||
// Euler angles in YXZ convention.
|
||||
// See https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix
|
||||
//
|
||||
|
|
@ -555,7 +555,7 @@ Vector3 Basis::get_euler(EulerOrder p_order) const {
|
|||
|
||||
return euler;
|
||||
} break;
|
||||
case EULER_ORDER_YZX: {
|
||||
case EulerOrder::YZX: {
|
||||
// Euler angles in YZX convention.
|
||||
// See https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix
|
||||
//
|
||||
|
|
@ -584,7 +584,7 @@ Vector3 Basis::get_euler(EulerOrder p_order) const {
|
|||
}
|
||||
return euler;
|
||||
} break;
|
||||
case EULER_ORDER_ZXY: {
|
||||
case EulerOrder::ZXY: {
|
||||
// Euler angles in ZXY convention.
|
||||
// See https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix
|
||||
//
|
||||
|
|
@ -612,7 +612,7 @@ Vector3 Basis::get_euler(EulerOrder p_order) const {
|
|||
}
|
||||
return euler;
|
||||
} break;
|
||||
case EULER_ORDER_ZYX: {
|
||||
case EulerOrder::ZYX: {
|
||||
// Euler angles in ZYX convention.
|
||||
// See https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix
|
||||
//
|
||||
|
|
@ -663,22 +663,22 @@ void Basis::set_euler(const Vector3 &p_euler, EulerOrder p_order) {
|
|||
Basis zmat(c, -s, 0, s, c, 0, 0, 0, 1);
|
||||
|
||||
switch (p_order) {
|
||||
case EULER_ORDER_XYZ: {
|
||||
case EulerOrder::XYZ: {
|
||||
*this = xmat * (ymat * zmat);
|
||||
} break;
|
||||
case EULER_ORDER_XZY: {
|
||||
case EulerOrder::XZY: {
|
||||
*this = xmat * zmat * ymat;
|
||||
} break;
|
||||
case EULER_ORDER_YXZ: {
|
||||
case EulerOrder::YXZ: {
|
||||
*this = ymat * xmat * zmat;
|
||||
} break;
|
||||
case EULER_ORDER_YZX: {
|
||||
case EulerOrder::YZX: {
|
||||
*this = ymat * zmat * xmat;
|
||||
} break;
|
||||
case EULER_ORDER_ZXY: {
|
||||
case EulerOrder::ZXY: {
|
||||
*this = zmat * xmat * ymat;
|
||||
} break;
|
||||
case EULER_ORDER_ZYX: {
|
||||
case EulerOrder::ZYX: {
|
||||
*this = zmat * ymat * xmat;
|
||||
} break;
|
||||
default: {
|
||||
|
|
|
|||
|
|
@ -56,15 +56,6 @@ struct _NO_DISCARD_ Basis {
|
|||
|
||||
_FORCE_INLINE_ real_t determinant() const;
|
||||
|
||||
enum EulerOrder {
|
||||
EULER_ORDER_XYZ,
|
||||
EULER_ORDER_XZY,
|
||||
EULER_ORDER_YXZ,
|
||||
EULER_ORDER_YZX,
|
||||
EULER_ORDER_ZXY,
|
||||
EULER_ORDER_ZYX
|
||||
};
|
||||
|
||||
void from_z(const Vector3 &p_z);
|
||||
|
||||
void rotate(const Vector3 &p_axis, real_t p_angle);
|
||||
|
|
@ -73,13 +64,13 @@ struct _NO_DISCARD_ Basis {
|
|||
void rotate_local(const Vector3 &p_axis, real_t p_angle);
|
||||
Basis rotated_local(const Vector3 &p_axis, real_t p_angle) const;
|
||||
|
||||
void rotate(const Vector3 &p_euler, EulerOrder p_order = EULER_ORDER_YXZ);
|
||||
Basis rotated(const Vector3 &p_euler, EulerOrder p_order = EULER_ORDER_YXZ) const;
|
||||
void rotate(const Vector3 &p_euler, EulerOrder p_order = EulerOrder::YXZ);
|
||||
Basis rotated(const Vector3 &p_euler, EulerOrder p_order = EulerOrder::YXZ) const;
|
||||
|
||||
void rotate(const Quaternion &p_quaternion);
|
||||
Basis rotated(const Quaternion &p_quaternion) const;
|
||||
|
||||
Vector3 get_euler_normalized(EulerOrder p_order = EULER_ORDER_YXZ) const;
|
||||
Vector3 get_euler_normalized(EulerOrder p_order = EulerOrder::YXZ) const;
|
||||
void get_rotation_axis_angle(Vector3 &p_axis, real_t &p_angle) const;
|
||||
void get_rotation_axis_angle_local(Vector3 &p_axis, real_t &p_angle) const;
|
||||
Quaternion get_rotation_quaternion() const;
|
||||
|
|
@ -88,9 +79,9 @@ struct _NO_DISCARD_ Basis {
|
|||
|
||||
Vector3 rotref_posscale_decomposition(Basis &rotref) const;
|
||||
|
||||
Vector3 get_euler(EulerOrder p_order = EULER_ORDER_YXZ) const;
|
||||
void set_euler(const Vector3 &p_euler, EulerOrder p_order = EULER_ORDER_YXZ);
|
||||
static Basis from_euler(const Vector3 &p_euler, EulerOrder p_order = EULER_ORDER_YXZ) {
|
||||
Vector3 get_euler(EulerOrder p_order = EulerOrder::YXZ) const;
|
||||
void set_euler(const Vector3 &p_euler, EulerOrder p_order = EulerOrder::YXZ);
|
||||
static Basis from_euler(const Vector3 &p_euler, EulerOrder p_order = EulerOrder::YXZ) {
|
||||
Basis b;
|
||||
b.set_euler(p_euler, p_order);
|
||||
return b;
|
||||
|
|
@ -119,7 +110,7 @@ struct _NO_DISCARD_ Basis {
|
|||
Vector3 get_scale_local() const;
|
||||
|
||||
void set_axis_angle_scale(const Vector3 &p_axis, real_t p_angle, const Vector3 &p_scale);
|
||||
void set_euler_scale(const Vector3 &p_euler, const Vector3 &p_scale, EulerOrder p_order = EULER_ORDER_YXZ);
|
||||
void set_euler_scale(const Vector3 &p_euler, const Vector3 &p_scale, EulerOrder p_order = EulerOrder::YXZ);
|
||||
void set_quaternion_scale(const Quaternion &p_quaternion, const Vector3 &p_scale);
|
||||
|
||||
// transposed dot products
|
||||
|
|
|
|||
|
|
@ -116,6 +116,15 @@ enum Corner {
|
|||
CORNER_BOTTOM_LEFT
|
||||
};
|
||||
|
||||
enum class EulerOrder {
|
||||
XYZ,
|
||||
XZY,
|
||||
YXZ,
|
||||
YZX,
|
||||
ZXY,
|
||||
ZYX
|
||||
};
|
||||
|
||||
/**
|
||||
* The "Real" type is an abstract type used for real numbers, such as 1.5,
|
||||
* in contrast to integer numbers. Precision can be controlled with the
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ real_t Quaternion::angle_to(const Quaternion &p_to) const {
|
|||
// This implementation uses XYZ convention (Z is the first rotation).
|
||||
Vector3 Quaternion::get_euler_xyz() const {
|
||||
Basis m(*this);
|
||||
return m.get_euler(Basis::EULER_ORDER_XYZ);
|
||||
return m.get_euler(EulerOrder::XYZ);
|
||||
}
|
||||
|
||||
// get_euler_yxz returns a vector containing the Euler angles in the format
|
||||
|
|
@ -56,7 +56,7 @@ Vector3 Quaternion::get_euler_yxz() const {
|
|||
ERR_FAIL_COND_V_MSG(!is_normalized(), Vector3(0, 0, 0), "The quaternion must be normalized.");
|
||||
#endif
|
||||
Basis m(*this);
|
||||
return m.get_euler(Basis::EULER_ORDER_YXZ);
|
||||
return m.get_euler(EulerOrder::YXZ);
|
||||
}
|
||||
|
||||
void Quaternion::operator*=(const Quaternion &p_q) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue