summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBirk Magnussen <6238428+BMagnu@users.noreply.github.com>2024-04-12 18:38:35 +0200
committerBirk Magnussen <6238428+BMagnu@users.noreply.github.com>2024-04-16 13:43:00 +0200
commitdd97ff44ab7213705a89d9489cb90bbf91eb18e6 (patch)
treec5bcba95264fc3134158c6139711b33e3d89a467
parent4728ff30c0226b9918b29a6ba494dc61eae87639 (diff)
downloadredot-engine-dd97ff44ab7213705a89d9489cb90bbf91eb18e6.tar.gz
Fixes the issue where setting global rotation would reset scale.
This was caused because the basis for the target global transform was entirely recreated. This process did not account for the scale of the basis of the current global transform. This PR amends this by scaling the recreated basis for the global transform by the current global scale of the Node3D. Note that this scaling has to be done from the current global scale and not from the local scale of the Node3D, otherwise issues would arise if parents of this Node3D would be scaled.
-rw-r--r--scene/3d/node_3d.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/scene/3d/node_3d.cpp b/scene/3d/node_3d.cpp
index 5c081a0b47..b11a1d9506 100644
--- a/scene/3d/node_3d.cpp
+++ b/scene/3d/node_3d.cpp
@@ -293,7 +293,7 @@ Vector3 Node3D::get_global_rotation_degrees() const {
void Node3D::set_global_rotation(const Vector3 &p_euler_rad) {
ERR_THREAD_GUARD;
Transform3D transform = get_global_transform();
- transform.basis = Basis::from_euler(p_euler_rad);
+ transform.basis = Basis::from_euler(p_euler_rad) * Basis::from_scale(transform.basis.get_scale());
set_global_transform(transform);
}