v2.0.0
Loading...
Searching...
No Matches
cameracontroller.h
Go to the documentation of this file.
1//=============================================================================================================
34
35#ifndef CAMERACONTROLLER_H
36#define CAMERACONTROLLER_H
37
38//=============================================================================================================
39// INCLUDES
40//=============================================================================================================
41
43
44#include "core/viewstate.h"
45
46#include <QMatrix4x4>
47#include <QQuaternion>
48#include <QVector3D>
49#include <QVector2D>
50#include <QPoint>
51#include <QSize>
52
53//=============================================================================================================
61{
62 QMatrix4x4 projection;
63 QMatrix4x4 view;
64 QMatrix4x4 model;
65 QVector3D cameraPos;
66 QVector3D upVector;
67 QVector3D lookAt;
68 float distance = 0.0f;
69};
70
71//=============================================================================================================
82{
83public:
84 //=========================================================================================================
88 CameraController() = default;
89
90 // ── Scene geometry ─────────────────────────────────────────────────
91
93 void setSceneCenter(const QVector3D &center) { m_sceneCenter = center; }
94
96 void setSceneSize(float size) { m_sceneSize = (size > 0.01f) ? size : 0.3f; }
97
98 QVector3D sceneCenter() const { return m_sceneCenter; }
99 float sceneSize() const { return m_sceneSize; }
100
101 // ── Single-view camera state ───────────────────────────────────────
102
104 void setRotation(const QQuaternion &q) { m_cameraRotation = q; }
105 QQuaternion rotation() const { return m_cameraRotation; }
106
108 void setZoom(float z) { m_zoom = z; }
109 float zoom() const { return m_zoom; }
110
112 void resetRotation() { m_cameraRotation = QQuaternion(); }
113
114 // ── Matrix computation ─────────────────────────────────────────────
115
122 CameraResult computeSingleView(float aspectRatio) const;
123
131 CameraResult computeMultiView(const SubView &subView, float aspectRatio) const;
132
133 // ── Mouse interaction ──────────────────────────────────────────────
134
142 static void applyMouseRotation(const QPoint &delta,
143 QQuaternion &rotation,
144 float speed = 0.5f);
145
153 static void applyMousePan(const QPoint &delta,
154 QVector2D &pan,
155 float sceneSize);
156
157private:
158 CameraResult computeForRotation(const QQuaternion &effectiveRotation,
159 float zoom,
160 const QVector2D &pan,
161 bool applyPan,
162 float aspectRatio) const;
163
164 QQuaternion m_cameraRotation;
165 QVector3D m_sceneCenter = QVector3D(0, 0, 0);
166 float m_sceneSize = 0.3f;
167 float m_zoom = 0.0f;
168};
169
170#endif // CAMERACONTROLLER_H
disp3D_rhi library export/import macros.
#define DISP3DRHISHARED_EXPORT
ViewState declarations — per-view data structures and conversion helpers.
Viewport subdivision holding its own camera, projection, and scissor rectangle.
Definition viewstate.h:148
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 sceneSize() const