CedricGuillemet / ImGuizmo

Immediate mode 3D gizmo for scene editing and other controls based on Dear Imgui
MIT License
3.22k stars 907 forks source link

WIP: stateless calculation for display-constant gizmo #295

Open yc-feej opened 1 year ago

yc-feej commented 1 year ago

Background: I'm working on an engine involving manipulating stuffs across real-world semantic maps. Since the map is really large (and the unit length of the engine is different from industrial game engines like UE or unity), sometimes when I zoom out and intend to move something, the arrow/moving plane will shrink until invisible, which makes it impossible to move things around. Same thing happens when translation values become really large (say, 10,000).

Solution: I added up an option, CONSTANCY, which indicates the display mode of gizmo itself. When it's set to SCALE_CONST, the arrow length and plane length will remain world-space constant (becoming larger/smaller when zooming in or not), and it's the default value for added argument - which means that no modification required for existing codes. When it's set to DISPLAY_CONST however, the arrow/plane will remain screen-space constant (no change when zooming in or out).

TODOs: I've done most works for translation and scaling. Rotation is still WIP.

yc-feej commented 1 year ago

Easy showcase:

SCALE_CONST: Screenshot from 2023-03-30 13-15-43 Screenshot from 2023-03-30 13-16-02 Screenshot from 2023-03-30 13-16-08

DISPLAY_CONST: Screenshot from 2023-03-30 13-17-39 Screenshot from 2023-03-30 13-17-44 Screenshot from 2023-03-30 13-17-53