Skip to content

Commit

Permalink
Fixes the issue where setting global rotation would reset scale.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
BMagnu committed Apr 16, 2024
1 parent 4728ff3 commit dd97ff4
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion scene/3d/node_3d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down

0 comments on commit dd97ff4

Please sign in to comment.