Make rotation gizmo white outline a 4th handle that rotates around the camera's view-axis#108608
Conversation
d76bc2e to
2bf683f
Compare
db6f08a to
9e6438c
Compare
9e6438c to
c6bae67
Compare
Calinou
left a comment
There was a problem hiding this comment.
Tested locally, it works as expected.
Code looks good to me.
c6bae67 to
cc1389a
Compare
cc1389a to
ab24ce1
Compare
|
Rebased since #108576 was merged. |
70c6ad3 to
366170b
Compare
There was a problem hiding this comment.
I tested shearing and multiple selections.
The shearing case is handled to be fine:
sh.mp4
The combination of multiple selections and rotation in local mode lacks consistency with axis-specified rotation and should be fixed; Local mode rotation uses each origin of the node.
Axis = Y (Correct, use each node's origin):
locrot_y.mp4
Axis = ViewPlaneNormal (Incorrect, use only primary selected node's origin):
locrot_view.mp4
I assume this can likely be fixed by passing the origin individually.
366170b to
47e57fe
Compare
|
Should be fixed now. 2025-10-09.20-12-45.mp4 |
|
Looks like there is some shearing when multiple nodes are selected now, so I will need to look into that. |
|
When multiple selections are made, it should be correct behavior for each selection to be sheared individually. |
|
Oops I didn't pay attention to the scales across parents close enough in my testing. I think things are fine, let me know if I missed anything. |
|
Wouldn't that require #104233 as a prerequisite and its function enabled to make sense? Right now, local mode just means transform each node relative to its own local coordinates, and the 4th gizmo is always facing the camera, so it effectively behaves as a global transform. |
|
@ryevdokimov If #104233 is implemented and that option is enabled, the current 4th gizmo behavior is correct. Conversely, after implementing #104233 and that option is enabled, the y rotation in the above video should follow the current 4th gizmo's behavior. However, since #104233 is currently disabled in this PR, so the y rotation is correct and the 4th gizmo's movement is incorrect now. This PR must be fixed assuming that option #104233 is disabled. So if we implement #104233, you should reintroduce the current 4th gizmo behavior as the optional behavior when that option is enabled.
In other words, we must select the ring's normal as the rotation axis in the Local coordinate.
In the above case, the rotation axis for the 4th gizmo and the y rotation gizmo are differed.
However, in the above case, the rotation axis for the 4th gizmo and the y rotation gizmo must be the same. As long as option #104233 is disabled, that axis must be treated as a local rotation axis for each node. The current behavior always treats the 4th gizmo as the global rotation axis, so it is wrong for the behavior when #104233 is disabled. |
Ah yes, that makes sense actually, so the converse of that is what clarifies it. It's just a little confusing because I interpreted the correct behavior as how each node should behave as if it were selected individually in local mode, but when put in that context and if the other PR gets merged what you're saying is the correct way to differentiate the behavior between the two modes, and without that PR the default should be as if it were off. Thanks for the explanation. |
47e57fe to
8778080
Compare
|
Alright, try it now. 2025-11-09.19-05-09.mp4 |
8778080 to
30311ab
Compare
30311ab to
f26e0d8
Compare
…e camera's view-axis
f26e0d8 to
3a34350
Compare
|
Feedback addressed (comments, unnecessary changes, organization and naming/clarity). |
|
Thanks! |




Requires and includes: #108576Common functionality in other 3D software that increases the usability of the rotation gizmo.
Made the white outline slightly larger so it's more distinct and easier to select.
Everything else should work as expected or at least how #108576 works.
2025-07-15.15-36-41.mp4