add orbit camera support to FRED2 and qtFRED#7310
Open
Goober5000 wants to merge 1 commit intoscp-fs2open:masterfrom
Open
add orbit camera support to FRED2 and qtFRED#7310Goober5000 wants to merge 1 commit intoscp-fs2open:masterfrom
Goober5000 wants to merge 1 commit intoscp-fs2open:masterfrom
Conversation
Implement a spherical-coordinate orbit camera for both the MFC (FRED2) and Qt (qtFRED) editors, providing intuitive 3D viewport navigation similar to other 3D editing tools. Controls: - Middle mouse drag: orbit rotate around pivot point - Shift + middle mouse drag: pan the pivot point - Right mouse drag: orbit rotate (alternative to middle mouse) - Shift + right mouse drag: pan (alternative to shift + middle mouse) - Mouse wheel: zoom in/out - Right click without drag: context menu (preserving existing feature) Camera pivot selection: - If an object is selected, orbit around that object - Otherwise, intersect the camera forward ray with the current grid plane to find a natural pivot point - Falls back to grid center if the camera is parallel to the grid Grid-plane awareness: - Orbit axes are derived from The_grid->gmatrix using vm_vec_rotate and vm_vec_unrotate, so the camera orbits correctly on all three grid planes (XZ, XY, YZ), not just the default XZ plane - The look-at matrix uses the grid's up vector (uvec) rather than a hardcoded world-up direction Robust zoom/pan scaling: - Zoom uses an exponential formula (powf) so the distance multiplier is always positive regardless of physics_speed setting (1-500) - Pan uses a clamped speed factor to avoid excessive movement at high physics_speed values State management: - Keyboard camera movement (process_controls) invalidates orbit state, so the next mouse drag re-initializes from the current view - Orbit state is per-viewport in qtFRED (EditorViewport members) and global in FRED2 (matching existing conventions in each codebase) Implementation: - FRED2: orbit math in fredrender.cpp, mouse handlers in fredview.cpp - qtFRED: orbit math in EditorViewport.cpp, mouse/wheel handlers in renderwidget.cpp; RenderWindow::event() updated to forward middle button and wheel events to RenderWidget Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implement a spherical-coordinate orbit camera for both the MFC (FRED2) and Qt (qtFRED) editors, providing intuitive 3D viewport navigation similar to other 3D editing tools.
Controls:
Camera pivot selection:
Grid-plane awareness:
Robust zoom/pan scaling:
State management:
Implementation: