1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-22 15:06:45 +00:00

Fix consistency of translated/scaled/rotated in Transform2D and Transform3D

This commit is contained in:
Fabian Keller
2022-07-30 12:17:33 +02:00
parent f450f242b9
commit f242f9c738
12 changed files with 426 additions and 41 deletions

View File

@@ -62,7 +62,15 @@ void Transform3D::rotate(const Vector3 &p_axis, real_t p_angle) {
}
Transform3D Transform3D::rotated(const Vector3 &p_axis, real_t p_angle) const {
return Transform3D(Basis(p_axis, p_angle), Vector3()) * (*this);
// Equivalent to left multiplication
Basis p_basis(p_axis, p_angle);
return Transform3D(p_basis * basis, p_basis.xform(origin));
}
Transform3D Transform3D::rotated_local(const Vector3 &p_axis, real_t p_angle) const {
// Equivalent to right multiplication
Basis p_basis(p_axis, p_angle);
return Transform3D(basis * p_basis, origin);
}
void Transform3D::rotate_basis(const Vector3 &p_axis, real_t p_angle) {
@@ -120,9 +128,13 @@ void Transform3D::scale(const Vector3 &p_scale) {
}
Transform3D Transform3D::scaled(const Vector3 &p_scale) const {
Transform3D t = *this;
t.scale(p_scale);
return t;
// Equivalent to left multiplication
return Transform3D(basis.scaled(p_scale), origin * p_scale);
}
Transform3D Transform3D::scaled_local(const Vector3 &p_scale) const {
// Equivalent to right multiplication
return Transform3D(basis.scaled_local(p_scale), origin);
}
void Transform3D::scale_basis(const Vector3 &p_scale) {
@@ -139,10 +151,14 @@ void Transform3D::translate_local(const Vector3 &p_translation) {
}
}
Transform3D Transform3D::translated(const Vector3 &p_translation) const {
// Equivalent to left multiplication
return Transform3D(basis, origin + p_translation);
}
Transform3D Transform3D::translated_local(const Vector3 &p_translation) const {
Transform3D t = *this;
t.translate_local(p_translation);
return t;
// Equivalent to right multiplication
return Transform3D(basis, origin + basis.xform(p_translation));
}
void Transform3D::orthonormalize() {