v2.0.0
Loading...
Searching...
No Matches
cameracontroller.h
Go to the documentation of this file.
1//=============================================================================================================
24
25#ifndef CAMERACONTROLLER_H
26#define CAMERACONTROLLER_H
27
28//=============================================================================================================
29// INCLUDES
30//=============================================================================================================
31
32#include "../disp3D_global.h"
33
34#include "core/viewstate.h"
35
36#include <QMatrix4x4>
37#include <QQuaternion>
38#include <QVector3D>
39#include <QVector2D>
40#include <QPoint>
41#include <QSize>
42
43//=============================================================================================================
51{
52 QMatrix4x4 projection;
53 QMatrix4x4 view;
54 QMatrix4x4 model;
55 QVector3D cameraPos;
56 QVector3D upVector;
57 QVector3D lookAt;
58 float distance = 0.0f;
59};
60
61//=============================================================================================================
72{
73public:
74 //=========================================================================================================
78 CameraController() = default;
79
80 // ── Scene geometry ─────────────────────────────────────────────────
81
83 void setSceneCenter(const QVector3D &center) { m_sceneCenter = center; }
84
86 void setSceneSize(float size) { m_sceneSize = (size > 0.01f) ? size : 0.3f; }
87
88 QVector3D sceneCenter() const { return m_sceneCenter; }
89 float sceneSize() const { return m_sceneSize; }
90
91 // ── Single-view camera state ───────────────────────────────────────
92
94 void setRotation(const QQuaternion &q) { m_cameraRotation = q; }
95 QQuaternion rotation() const { return m_cameraRotation; }
96
98 void setZoom(float z) { m_zoom = z; }
99 float zoom() const { return m_zoom; }
100
102 void resetRotation() { m_cameraRotation = QQuaternion(); }
103
104 // ── Matrix computation ─────────────────────────────────────────────
105
112 CameraResult computeSingleView(float aspectRatio) const;
113
121 CameraResult computeMultiView(const SubView &subView, float aspectRatio) const;
122
123 // ── Mouse interaction ──────────────────────────────────────────────
124
132 static void applyMouseRotation(const QPoint &delta,
133 QQuaternion &rotation,
134 float speed = 0.5f);
135
143 static void applyMousePan(const QPoint &delta,
144 QVector2D &pan,
145 float sceneSize);
146
147private:
148 CameraResult computeForRotation(const QQuaternion &effectiveRotation,
149 float zoom,
150 const QVector2D &pan,
151 bool applyPan,
152 float aspectRatio) const;
153
154 QQuaternion m_cameraRotation;
155 QVector3D m_sceneCenter = QVector3D(0, 0, 0);
156 float m_sceneSize = 0.3f;
157 float m_zoom = 0.0f;
158};
159
160#endif // CAMERACONTROLLER_H
Per-viewport state (camera preset, zoom, pan, visibility filter) and serialisation helpers.
Library export/import macros and namespace marker for the disp3D library.
#define DISP3DSHARED_EXPORT
Viewport subdivision holding its own camera, projection, and scissor rectangle.
Definition viewstate.h:139
Computed camera matrices (projection, view, model) and vectors for a single viewport.
QVector3D cameraPos
QMatrix4x4 view
QMatrix4x4 model
QMatrix4x4 projection
QVector3D upVector
void setSceneSize(float size)
void setZoom(float z)
QVector3D sceneCenter() const
QQuaternion rotation() const
void setRotation(const QQuaternion &q)
void setSceneCenter(const QVector3D &center)
CameraController()=default
float zoom() const
float sceneSize() const