|
@@ -58,12 +58,12 @@ struct _NO_DISCARD_ Vector3 {
|
|
real_t coord[3] = { 0 };
|
|
real_t coord[3] = { 0 };
|
|
};
|
|
};
|
|
|
|
|
|
- _FORCE_INLINE_ const real_t &operator[](const int p_axis) const {
|
|
|
|
|
|
+ _FORCE_INLINE_ const real_t &operator[](int p_axis) const {
|
|
DEV_ASSERT((unsigned int)p_axis < 3);
|
|
DEV_ASSERT((unsigned int)p_axis < 3);
|
|
return coord[p_axis];
|
|
return coord[p_axis];
|
|
}
|
|
}
|
|
|
|
|
|
- _FORCE_INLINE_ real_t &operator[](const int p_axis) {
|
|
|
|
|
|
+ _FORCE_INLINE_ real_t &operator[](int p_axis) {
|
|
DEV_ASSERT((unsigned int)p_axis < 3);
|
|
DEV_ASSERT((unsigned int)p_axis < 3);
|
|
return coord[p_axis];
|
|
return coord[p_axis];
|
|
}
|
|
}
|
|
@@ -91,31 +91,31 @@ struct _NO_DISCARD_ Vector3 {
|
|
_FORCE_INLINE_ Vector3 normalized() const;
|
|
_FORCE_INLINE_ Vector3 normalized() const;
|
|
_FORCE_INLINE_ bool is_normalized() const;
|
|
_FORCE_INLINE_ bool is_normalized() const;
|
|
_FORCE_INLINE_ Vector3 inverse() const;
|
|
_FORCE_INLINE_ Vector3 inverse() const;
|
|
- Vector3 limit_length(const real_t p_len = 1.0) const;
|
|
|
|
|
|
+ Vector3 limit_length(real_t p_len = 1.0) const;
|
|
|
|
|
|
_FORCE_INLINE_ void zero();
|
|
_FORCE_INLINE_ void zero();
|
|
|
|
|
|
- void snap(const Vector3 p_val);
|
|
|
|
- Vector3 snapped(const Vector3 p_val) const;
|
|
|
|
|
|
+ void snap(const Vector3 &p_step);
|
|
|
|
+ Vector3 snapped(const Vector3 &p_step) const;
|
|
|
|
|
|
- void rotate(const Vector3 &p_axis, const real_t p_angle);
|
|
|
|
- Vector3 rotated(const Vector3 &p_axis, const real_t p_angle) const;
|
|
|
|
|
|
+ void rotate(const Vector3 &p_axis, real_t p_angle);
|
|
|
|
+ Vector3 rotated(const Vector3 &p_axis, real_t p_angle) const;
|
|
|
|
|
|
/* Static Methods between 2 vector3s */
|
|
/* Static Methods between 2 vector3s */
|
|
|
|
|
|
- _FORCE_INLINE_ Vector3 lerp(const Vector3 &p_to, const real_t p_weight) const;
|
|
|
|
- _FORCE_INLINE_ Vector3 slerp(const Vector3 &p_to, const real_t p_weight) const;
|
|
|
|
- _FORCE_INLINE_ Vector3 cubic_interpolate(const Vector3 &p_b, const Vector3 &p_pre_a, const Vector3 &p_post_b, const real_t p_weight) const;
|
|
|
|
- _FORCE_INLINE_ Vector3 cubic_interpolate_in_time(const Vector3 &p_b, const Vector3 &p_pre_a, const Vector3 &p_post_b, const real_t p_weight, const real_t &p_b_t, const real_t &p_pre_a_t, const real_t &p_post_b_t) const;
|
|
|
|
- _FORCE_INLINE_ Vector3 bezier_interpolate(const Vector3 &p_control_1, const Vector3 &p_control_2, const Vector3 &p_end, const real_t p_t) const;
|
|
|
|
- _FORCE_INLINE_ Vector3 bezier_derivative(const Vector3 &p_control_1, const Vector3 &p_control_2, const Vector3 &p_end, const real_t p_t) const;
|
|
|
|
|
|
+ _FORCE_INLINE_ Vector3 lerp(const Vector3 &p_to, real_t p_weight) const;
|
|
|
|
+ _FORCE_INLINE_ Vector3 slerp(const Vector3 &p_to, real_t p_weight) const;
|
|
|
|
+ _FORCE_INLINE_ Vector3 cubic_interpolate(const Vector3 &p_b, const Vector3 &p_pre_a, const Vector3 &p_post_b, real_t p_weight) const;
|
|
|
|
+ _FORCE_INLINE_ Vector3 cubic_interpolate_in_time(const Vector3 &p_b, const Vector3 &p_pre_a, const Vector3 &p_post_b, real_t p_weight, real_t p_b_t, real_t p_pre_a_t, real_t p_post_b_t) const;
|
|
|
|
+ _FORCE_INLINE_ Vector3 bezier_interpolate(const Vector3 &p_control_1, const Vector3 &p_control_2, const Vector3 &p_end, real_t p_t) const;
|
|
|
|
+ _FORCE_INLINE_ Vector3 bezier_derivative(const Vector3 &p_control_1, const Vector3 &p_control_2, const Vector3 &p_end, real_t p_t) const;
|
|
|
|
|
|
- Vector3 move_toward(const Vector3 &p_to, const real_t p_delta) const;
|
|
|
|
|
|
+ Vector3 move_toward(const Vector3 &p_to, real_t p_delta) const;
|
|
|
|
|
|
Vector2 octahedron_encode() const;
|
|
Vector2 octahedron_encode() const;
|
|
static Vector3 octahedron_decode(const Vector2 &p_oct);
|
|
static Vector3 octahedron_decode(const Vector2 &p_oct);
|
|
- Vector2 octahedron_tangent_encode(const float sign) const;
|
|
|
|
- static Vector3 octahedron_tangent_decode(const Vector2 &p_oct, float *sign);
|
|
|
|
|
|
+ Vector2 octahedron_tangent_encode(float p_sign) const;
|
|
|
|
+ static Vector3 octahedron_tangent_decode(const Vector2 &p_oct, float *r_sign);
|
|
|
|
|
|
_FORCE_INLINE_ Vector3 cross(const Vector3 &p_with) const;
|
|
_FORCE_INLINE_ Vector3 cross(const Vector3 &p_with) const;
|
|
_FORCE_INLINE_ real_t dot(const Vector3 &p_with) const;
|
|
_FORCE_INLINE_ real_t dot(const Vector3 &p_with) const;
|
|
@@ -131,7 +131,7 @@ struct _NO_DISCARD_ Vector3 {
|
|
_FORCE_INLINE_ real_t distance_to(const Vector3 &p_to) const;
|
|
_FORCE_INLINE_ real_t distance_to(const Vector3 &p_to) const;
|
|
_FORCE_INLINE_ real_t distance_squared_to(const Vector3 &p_to) const;
|
|
_FORCE_INLINE_ real_t distance_squared_to(const Vector3 &p_to) const;
|
|
|
|
|
|
- _FORCE_INLINE_ Vector3 posmod(const real_t p_mod) const;
|
|
|
|
|
|
+ _FORCE_INLINE_ Vector3 posmod(real_t p_mod) const;
|
|
_FORCE_INLINE_ Vector3 posmodv(const Vector3 &p_modv) const;
|
|
_FORCE_INLINE_ Vector3 posmodv(const Vector3 &p_modv) const;
|
|
_FORCE_INLINE_ Vector3 project(const Vector3 &p_to) const;
|
|
_FORCE_INLINE_ Vector3 project(const Vector3 &p_to) const;
|
|
|
|
|
|
@@ -158,10 +158,10 @@ struct _NO_DISCARD_ Vector3 {
|
|
_FORCE_INLINE_ Vector3 &operator/=(const Vector3 &p_v);
|
|
_FORCE_INLINE_ Vector3 &operator/=(const Vector3 &p_v);
|
|
_FORCE_INLINE_ Vector3 operator/(const Vector3 &p_v) const;
|
|
_FORCE_INLINE_ Vector3 operator/(const Vector3 &p_v) const;
|
|
|
|
|
|
- _FORCE_INLINE_ Vector3 &operator*=(const real_t p_scalar);
|
|
|
|
- _FORCE_INLINE_ Vector3 operator*(const real_t p_scalar) const;
|
|
|
|
- _FORCE_INLINE_ Vector3 &operator/=(const real_t p_scalar);
|
|
|
|
- _FORCE_INLINE_ Vector3 operator/(const real_t p_scalar) const;
|
|
|
|
|
|
+ _FORCE_INLINE_ Vector3 &operator*=(real_t p_scalar);
|
|
|
|
+ _FORCE_INLINE_ Vector3 operator*(real_t p_scalar) const;
|
|
|
|
+ _FORCE_INLINE_ Vector3 &operator/=(real_t p_scalar);
|
|
|
|
+ _FORCE_INLINE_ Vector3 operator/(real_t p_scalar) const;
|
|
|
|
|
|
_FORCE_INLINE_ Vector3 operator-() const;
|
|
_FORCE_INLINE_ Vector3 operator-() const;
|
|
|
|
|
|
@@ -176,7 +176,7 @@ struct _NO_DISCARD_ Vector3 {
|
|
operator Vector3i() const;
|
|
operator Vector3i() const;
|
|
|
|
|
|
_FORCE_INLINE_ Vector3() {}
|
|
_FORCE_INLINE_ Vector3() {}
|
|
- _FORCE_INLINE_ Vector3(const real_t p_x, const real_t p_y, const real_t p_z) {
|
|
|
|
|
|
+ _FORCE_INLINE_ Vector3(real_t p_x, real_t p_y, real_t p_z) {
|
|
x = p_x;
|
|
x = p_x;
|
|
y = p_y;
|
|
y = p_y;
|
|
z = p_z;
|
|
z = p_z;
|
|
@@ -216,7 +216,7 @@ Vector3 Vector3::round() const {
|
|
return Vector3(Math::round(x), Math::round(y), Math::round(z));
|
|
return Vector3(Math::round(x), Math::round(y), Math::round(z));
|
|
}
|
|
}
|
|
|
|
|
|
-Vector3 Vector3::lerp(const Vector3 &p_to, const real_t p_weight) const {
|
|
|
|
|
|
+Vector3 Vector3::lerp(const Vector3 &p_to, real_t p_weight) const {
|
|
Vector3 res = *this;
|
|
Vector3 res = *this;
|
|
res.x = Math::lerp(res.x, p_to.x, p_weight);
|
|
res.x = Math::lerp(res.x, p_to.x, p_weight);
|
|
res.y = Math::lerp(res.y, p_to.y, p_weight);
|
|
res.y = Math::lerp(res.y, p_to.y, p_weight);
|
|
@@ -224,7 +224,7 @@ Vector3 Vector3::lerp(const Vector3 &p_to, const real_t p_weight) const {
|
|
return res;
|
|
return res;
|
|
}
|
|
}
|
|
|
|
|
|
-Vector3 Vector3::slerp(const Vector3 &p_to, const real_t p_weight) const {
|
|
|
|
|
|
+Vector3 Vector3::slerp(const Vector3 &p_to, real_t p_weight) const {
|
|
// This method seems more complicated than it really is, since we write out
|
|
// This method seems more complicated than it really is, since we write out
|
|
// the internals of some methods for efficiency (mainly, checking length).
|
|
// the internals of some methods for efficiency (mainly, checking length).
|
|
real_t start_length_sq = length_squared();
|
|
real_t start_length_sq = length_squared();
|
|
@@ -246,7 +246,7 @@ Vector3 Vector3::slerp(const Vector3 &p_to, const real_t p_weight) const {
|
|
return rotated(axis, angle * p_weight) * (result_length / start_length);
|
|
return rotated(axis, angle * p_weight) * (result_length / start_length);
|
|
}
|
|
}
|
|
|
|
|
|
-Vector3 Vector3::cubic_interpolate(const Vector3 &p_b, const Vector3 &p_pre_a, const Vector3 &p_post_b, const real_t p_weight) const {
|
|
|
|
|
|
+Vector3 Vector3::cubic_interpolate(const Vector3 &p_b, const Vector3 &p_pre_a, const Vector3 &p_post_b, real_t p_weight) const {
|
|
Vector3 res = *this;
|
|
Vector3 res = *this;
|
|
res.x = Math::cubic_interpolate(res.x, p_b.x, p_pre_a.x, p_post_b.x, p_weight);
|
|
res.x = Math::cubic_interpolate(res.x, p_b.x, p_pre_a.x, p_post_b.x, p_weight);
|
|
res.y = Math::cubic_interpolate(res.y, p_b.y, p_pre_a.y, p_post_b.y, p_weight);
|
|
res.y = Math::cubic_interpolate(res.y, p_b.y, p_pre_a.y, p_post_b.y, p_weight);
|
|
@@ -254,7 +254,7 @@ Vector3 Vector3::cubic_interpolate(const Vector3 &p_b, const Vector3 &p_pre_a, c
|
|
return res;
|
|
return res;
|
|
}
|
|
}
|
|
|
|
|
|
-Vector3 Vector3::cubic_interpolate_in_time(const Vector3 &p_b, const Vector3 &p_pre_a, const Vector3 &p_post_b, const real_t p_weight, const real_t &p_b_t, const real_t &p_pre_a_t, const real_t &p_post_b_t) const {
|
|
|
|
|
|
+Vector3 Vector3::cubic_interpolate_in_time(const Vector3 &p_b, const Vector3 &p_pre_a, const Vector3 &p_post_b, real_t p_weight, real_t p_b_t, real_t p_pre_a_t, real_t p_post_b_t) const {
|
|
Vector3 res = *this;
|
|
Vector3 res = *this;
|
|
res.x = Math::cubic_interpolate_in_time(res.x, p_b.x, p_pre_a.x, p_post_b.x, p_weight, p_b_t, p_pre_a_t, p_post_b_t);
|
|
res.x = Math::cubic_interpolate_in_time(res.x, p_b.x, p_pre_a.x, p_post_b.x, p_weight, p_b_t, p_pre_a_t, p_post_b_t);
|
|
res.y = Math::cubic_interpolate_in_time(res.y, p_b.y, p_pre_a.y, p_post_b.y, p_weight, p_b_t, p_pre_a_t, p_post_b_t);
|
|
res.y = Math::cubic_interpolate_in_time(res.y, p_b.y, p_pre_a.y, p_post_b.y, p_weight, p_b_t, p_pre_a_t, p_post_b_t);
|
|
@@ -262,7 +262,7 @@ Vector3 Vector3::cubic_interpolate_in_time(const Vector3 &p_b, const Vector3 &p_
|
|
return res;
|
|
return res;
|
|
}
|
|
}
|
|
|
|
|
|
-Vector3 Vector3::bezier_interpolate(const Vector3 &p_control_1, const Vector3 &p_control_2, const Vector3 &p_end, const real_t p_t) const {
|
|
|
|
|
|
+Vector3 Vector3::bezier_interpolate(const Vector3 &p_control_1, const Vector3 &p_control_2, const Vector3 &p_end, real_t p_t) const {
|
|
Vector3 res = *this;
|
|
Vector3 res = *this;
|
|
res.x = Math::bezier_interpolate(res.x, p_control_1.x, p_control_2.x, p_end.x, p_t);
|
|
res.x = Math::bezier_interpolate(res.x, p_control_1.x, p_control_2.x, p_end.x, p_t);
|
|
res.y = Math::bezier_interpolate(res.y, p_control_1.y, p_control_2.y, p_end.y, p_t);
|
|
res.y = Math::bezier_interpolate(res.y, p_control_1.y, p_control_2.y, p_end.y, p_t);
|
|
@@ -270,7 +270,7 @@ Vector3 Vector3::bezier_interpolate(const Vector3 &p_control_1, const Vector3 &p
|
|
return res;
|
|
return res;
|
|
}
|
|
}
|
|
|
|
|
|
-Vector3 Vector3::bezier_derivative(const Vector3 &p_control_1, const Vector3 &p_control_2, const Vector3 &p_end, const real_t p_t) const {
|
|
|
|
|
|
+Vector3 Vector3::bezier_derivative(const Vector3 &p_control_1, const Vector3 &p_control_2, const Vector3 &p_end, real_t p_t) const {
|
|
Vector3 res = *this;
|
|
Vector3 res = *this;
|
|
res.x = Math::bezier_derivative(res.x, p_control_1.x, p_control_2.x, p_end.x, p_t);
|
|
res.x = Math::bezier_derivative(res.x, p_control_1.x, p_control_2.x, p_end.x, p_t);
|
|
res.y = Math::bezier_derivative(res.y, p_control_1.y, p_control_2.y, p_end.y, p_t);
|
|
res.y = Math::bezier_derivative(res.y, p_control_1.y, p_control_2.y, p_end.y, p_t);
|
|
@@ -286,7 +286,7 @@ real_t Vector3::distance_squared_to(const Vector3 &p_to) const {
|
|
return (p_to - *this).length_squared();
|
|
return (p_to - *this).length_squared();
|
|
}
|
|
}
|
|
|
|
|
|
-Vector3 Vector3::posmod(const real_t p_mod) const {
|
|
|
|
|
|
+Vector3 Vector3::posmod(real_t p_mod) const {
|
|
return Vector3(Math::fposmod(x, p_mod), Math::fposmod(y, p_mod), Math::fposmod(z, p_mod));
|
|
return Vector3(Math::fposmod(x, p_mod), Math::fposmod(y, p_mod), Math::fposmod(z, p_mod));
|
|
}
|
|
}
|
|
|
|
|
|
@@ -361,7 +361,7 @@ Vector3 Vector3::operator/(const Vector3 &p_v) const {
|
|
return Vector3(x / p_v.x, y / p_v.y, z / p_v.z);
|
|
return Vector3(x / p_v.x, y / p_v.y, z / p_v.z);
|
|
}
|
|
}
|
|
|
|
|
|
-Vector3 &Vector3::operator*=(const real_t p_scalar) {
|
|
|
|
|
|
+Vector3 &Vector3::operator*=(real_t p_scalar) {
|
|
x *= p_scalar;
|
|
x *= p_scalar;
|
|
y *= p_scalar;
|
|
y *= p_scalar;
|
|
z *= p_scalar;
|
|
z *= p_scalar;
|
|
@@ -371,34 +371,34 @@ Vector3 &Vector3::operator*=(const real_t p_scalar) {
|
|
// Multiplication operators required to workaround issues with LLVM using implicit conversion
|
|
// Multiplication operators required to workaround issues with LLVM using implicit conversion
|
|
// to Vector3i instead for integers where it should not.
|
|
// to Vector3i instead for integers where it should not.
|
|
|
|
|
|
-_FORCE_INLINE_ Vector3 operator*(const float p_scalar, const Vector3 &p_vec) {
|
|
|
|
|
|
+_FORCE_INLINE_ Vector3 operator*(float p_scalar, const Vector3 &p_vec) {
|
|
return p_vec * p_scalar;
|
|
return p_vec * p_scalar;
|
|
}
|
|
}
|
|
|
|
|
|
-_FORCE_INLINE_ Vector3 operator*(const double p_scalar, const Vector3 &p_vec) {
|
|
|
|
|
|
+_FORCE_INLINE_ Vector3 operator*(double p_scalar, const Vector3 &p_vec) {
|
|
return p_vec * p_scalar;
|
|
return p_vec * p_scalar;
|
|
}
|
|
}
|
|
|
|
|
|
-_FORCE_INLINE_ Vector3 operator*(const int32_t p_scalar, const Vector3 &p_vec) {
|
|
|
|
|
|
+_FORCE_INLINE_ Vector3 operator*(int32_t p_scalar, const Vector3 &p_vec) {
|
|
return p_vec * p_scalar;
|
|
return p_vec * p_scalar;
|
|
}
|
|
}
|
|
|
|
|
|
-_FORCE_INLINE_ Vector3 operator*(const int64_t p_scalar, const Vector3 &p_vec) {
|
|
|
|
|
|
+_FORCE_INLINE_ Vector3 operator*(int64_t p_scalar, const Vector3 &p_vec) {
|
|
return p_vec * p_scalar;
|
|
return p_vec * p_scalar;
|
|
}
|
|
}
|
|
|
|
|
|
-Vector3 Vector3::operator*(const real_t p_scalar) const {
|
|
|
|
|
|
+Vector3 Vector3::operator*(real_t p_scalar) const {
|
|
return Vector3(x * p_scalar, y * p_scalar, z * p_scalar);
|
|
return Vector3(x * p_scalar, y * p_scalar, z * p_scalar);
|
|
}
|
|
}
|
|
|
|
|
|
-Vector3 &Vector3::operator/=(const real_t p_scalar) {
|
|
|
|
|
|
+Vector3 &Vector3::operator/=(real_t p_scalar) {
|
|
x /= p_scalar;
|
|
x /= p_scalar;
|
|
y /= p_scalar;
|
|
y /= p_scalar;
|
|
z /= p_scalar;
|
|
z /= p_scalar;
|
|
return *this;
|
|
return *this;
|
|
}
|
|
}
|
|
|
|
|
|
-Vector3 Vector3::operator/(const real_t p_scalar) const {
|
|
|
|
|
|
+Vector3 Vector3::operator/(real_t p_scalar) const {
|
|
return Vector3(x / p_scalar, y / p_scalar, z / p_scalar);
|
|
return Vector3(x / p_scalar, y / p_scalar, z / p_scalar);
|
|
}
|
|
}
|
|
|
|
|