Replace Vector3.to_diagonal_matrix with Basis.from_scale
This commit is contained in:
parent
b8fdeb6467
commit
bf0213470c
8 changed files with 27 additions and 29 deletions
|
|
@ -207,6 +207,10 @@ Basis Basis::transposed() const {
|
|||
return tr;
|
||||
}
|
||||
|
||||
Basis Basis::from_scale(const Vector3 &p_scale) {
|
||||
return Basis(p_scale.x, 0, 0, 0, p_scale.y, 0, 0, 0, p_scale.z);
|
||||
}
|
||||
|
||||
// Multiplies the matrix from left by the scaling matrix: M -> S.M
|
||||
// See the comment for Basis::rotated for further explanation.
|
||||
void Basis::scale(const Vector3 &p_scale) {
|
||||
|
|
@ -246,10 +250,7 @@ void Basis::make_scale_uniform() {
|
|||
}
|
||||
|
||||
Basis Basis::scaled_local(const Vector3 &p_scale) const {
|
||||
Basis b;
|
||||
b.set_diagonal(p_scale);
|
||||
|
||||
return (*this) * b;
|
||||
return (*this) * Basis::from_scale(p_scale);
|
||||
}
|
||||
|
||||
Vector3 Basis::get_scale_abs() const {
|
||||
|
|
@ -991,21 +992,23 @@ void Basis::set_axis_angle(const Vector3 &p_axis, real_t p_phi) {
|
|||
}
|
||||
|
||||
void Basis::set_axis_angle_scale(const Vector3 &p_axis, real_t p_phi, const Vector3 &p_scale) {
|
||||
set_diagonal(p_scale);
|
||||
_set_diagonal(p_scale);
|
||||
rotate(p_axis, p_phi);
|
||||
}
|
||||
|
||||
void Basis::set_euler_scale(const Vector3 &p_euler, const Vector3 &p_scale) {
|
||||
set_diagonal(p_scale);
|
||||
_set_diagonal(p_scale);
|
||||
rotate(p_euler);
|
||||
}
|
||||
|
||||
void Basis::set_quaternion_scale(const Quaternion &p_quaternion, const Vector3 &p_scale) {
|
||||
set_diagonal(p_scale);
|
||||
_set_diagonal(p_scale);
|
||||
rotate(p_quaternion);
|
||||
}
|
||||
|
||||
void Basis::set_diagonal(const Vector3 &p_diag) {
|
||||
// This also sets the non-diagonal elements to 0, which is misleading from the
|
||||
// name, so we want this method to be private. Use `from_scale` externally.
|
||||
void Basis::_set_diagonal(const Vector3 &p_diag) {
|
||||
elements[0][0] = p_diag.x;
|
||||
elements[0][1] = 0;
|
||||
elements[0][2] = 0;
|
||||
|
|
|
|||
|
|
@ -35,6 +35,9 @@
|
|||
#include "core/math/vector3.h"
|
||||
|
||||
class Basis {
|
||||
private:
|
||||
void _set_diagonal(const Vector3 &p_diag);
|
||||
|
||||
public:
|
||||
Vector3 elements[3] = {
|
||||
Vector3(1, 0, 0),
|
||||
|
|
@ -166,8 +169,6 @@ public:
|
|||
int get_orthogonal_index() const;
|
||||
void set_orthogonal_index(int p_index);
|
||||
|
||||
void set_diagonal(const Vector3 &p_diag);
|
||||
|
||||
bool is_orthogonal() const;
|
||||
bool is_diagonal() const;
|
||||
bool is_rotation() const;
|
||||
|
|
@ -254,6 +255,7 @@ public:
|
|||
|
||||
Basis(const Vector3 &p_axis, real_t p_phi) { set_axis_angle(p_axis, p_phi); }
|
||||
Basis(const Vector3 &p_axis, real_t p_phi, const Vector3 &p_scale) { set_axis_angle_scale(p_axis, p_phi, p_scale); }
|
||||
static Basis from_scale(const Vector3 &p_scale);
|
||||
|
||||
_FORCE_INLINE_ Basis(const Vector3 &row0, const Vector3 &row1, const Vector3 &row2) {
|
||||
elements[0] = row0;
|
||||
|
|
|
|||
|
|
@ -115,12 +115,6 @@ Basis Vector3::outer(const Vector3 &p_b) const {
|
|||
return Basis(row0, row1, row2);
|
||||
}
|
||||
|
||||
Basis Vector3::to_diagonal_matrix() const {
|
||||
return Basis(x, 0, 0,
|
||||
0, y, 0,
|
||||
0, 0, z);
|
||||
}
|
||||
|
||||
bool Vector3::is_equal_approx(const Vector3 &p_v) const {
|
||||
return Math::is_equal_approx(x, p_v.x) && Math::is_equal_approx(y, p_v.y) && Math::is_equal_approx(z, p_v.z);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -106,7 +106,6 @@ struct Vector3 {
|
|||
_FORCE_INLINE_ Vector3 cross(const Vector3 &p_b) const;
|
||||
_FORCE_INLINE_ real_t dot(const Vector3 &p_b) const;
|
||||
Basis outer(const Vector3 &p_b) const;
|
||||
Basis to_diagonal_matrix() const;
|
||||
|
||||
_FORCE_INLINE_ Vector3 abs() const;
|
||||
_FORCE_INLINE_ Vector3 floor() const;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue