class mrpt::viz::COrbitCameraController
Overview
Framework-agnostic orbit/pan/zoom camera controller.
Encapsulates the camera state (azimuth, elevation, zoom distance, pointing-at, roll, FOV, projective flag) and the mouse-delta math that converts raw pointer/scroll events into camera changes.
It is intentionally free of any UI or OpenGL dependency so it can be reused by mrpt_gui (nanogui), mrpt_imgui (Dear ImGui), or any future frontend.
Typical usage - forward framework mouse events into the three on* methods; then call applyTo(camera) before rendering:
mrpt::viz::COrbitCameraController ctrl; ctrl.setCameraPointing(0, 0, 0); ctrl.setZoomDistance(15.0f); // Inside your mouse-move handler: ctrl.onMouseMove(x, y, MouseButtons::Left, KeyModifiers::None); // Before rendering: ctrl.applyTo(myCamera);
#include <mrpt/viz/COrbitCameraController.h> class COrbitCameraController { public: // enums enum KeyModifiers; enum MouseButtons; // structs struct Params; // fields float orbitSensitivity = 0.25f; float panSensitivity = 0.001f; float zoomSensitivity = 0.15f; float rollSensitivity = 0.15f; // construction COrbitCameraController(); COrbitCameraController(const COrbitCameraController&); COrbitCameraController(COrbitCameraController&&); // methods COrbitCameraController& operator = (const COrbitCameraController&); COrbitCameraController& operator = (COrbitCameraController&&); void setCameraPointing( float x, float y, float z ); void setCameraPointing(const mrpt::math::TPoint3Df& pt); void setCameraPointing(const mrpt::math::TPoint3D& pt); float getCameraPointingX() const; float getCameraPointingY() const; float getCameraPointingZ() const; void setZoomDistance(float d); float getZoomDistance() const; void setAzimuthDegrees(float deg); float getAzimuthDegrees() const; void setElevationDegrees(float deg); float getElevationDegrees() const; void setRollDegrees(float deg); float getRollDegrees() const; void setProjectiveModel(bool isProjective); bool isProjectiveModel() const; void setFOVdeg(float fov); float getFOVdeg() const; void setZoomLimits(float minZoom, float maxZoom); std::pair<float, float> getZoomLimits(); void onMouseMove(int x, int y, uint8_t buttons, uint8_t modifiers); void onMouseButton(int x, int y, uint8_t button, bool down); void onScroll(float delta, uint8_t modifiers); void applyTo(mrpt::viz::CCamera& cam) const; void setFrom(const mrpt::viz::CCamera& cam); };
Fields
float orbitSensitivity = 0.25f
deg/pixel
float panSensitivity = 0.001f
world-units * zoom factor per pixel
float zoomSensitivity = 0.15f
fractional distance change per scroll unit
float rollSensitivity = 0.15f
deg/pixel
Methods
void setZoomLimits(float minZoom, float maxZoom)
Clamp zoom to minZoom, maxZoom.
void onMouseMove(int x, int y, uint8_t buttons, uint8_t modifiers)
Call on pointer-move events while any button is held.
void onMouseButton(int x, int y, uint8_t button, bool down)
Call on button press/release.
void onScroll(float delta, uint8_t modifiers)
Call on scroll-wheel events.
Parameters:
delta |
+1 = wheel-up (zoom in), -1 = wheel-down (zoom out). Fractional values are accepted (high-DPI trackpads). |
modifiers |
KeyModifiers bitmask. |
void applyTo(mrpt::viz::CCamera& cam) const
Writes the current orbit parameters into cam.
void setFrom(const mrpt::viz::CCamera& cam)
Initialises the controller from an existing CCamera.