15 #include "../GLMHelpers.h"
16 #include "../RegisteredMetaTypes.h"
17 #include "../ViewFrustum.h"
18 #include "../SettingHandle.h"
22 CAMERA_MODE_NULL = -1,
23 CAMERA_MODE_THIRD_PERSON,
24 CAMERA_MODE_FIRST_PERSON_LOOK_AT,
25 CAMERA_MODE_FIRST_PERSON,
27 CAMERA_MODE_INDEPENDENT,
34 Q_DECLARE_METATYPE(CameraMode);
36 #if defined(__GNUC__) && !defined(__clang__)
37 __attribute__((unused))
39 static int cameraModeId = qRegisterMetaType<CameraMode>();
41 class Camera :
public QObject {
44 Q_PROPERTY(glm::vec3 position READ getPosition WRITE setPosition)
45 Q_PROPERTY(glm::quat orientation READ getOrientation WRITE setOrientation)
46 Q_PROPERTY(QString mode READ getModeString WRITE setModeString NOTIFY modeUpdated)
47 Q_PROPERTY(QVariantMap frustum READ getViewFrustum CONSTANT)
48 Q_PROPERTY(
bool captureMouse READ getCaptureMouse WRITE setCaptureMouse NOTIFY captureMouseChanged)
49 Q_PROPERTY(
float sensitivity READ getSensitivity WRITE setSensitivity)
58 CameraMode getMode()
const {
return _mode; }
59 void setMode(CameraMode m);
61 void loadViewFrustum(ViewFrustum& frustum)
const;
63 const glm::mat4& getTransform()
const {
return _transform; }
64 void setTransform(
const glm::mat4& transform);
66 const glm::mat4& getProjection()
const {
return _projection; }
67 void setProjection(
const glm::mat4& projection);
69 QVariantMap getViewFrustum();
77 QString getModeString()
const;
84 void setModeString(
const QString& mode);
91 glm::vec3 getPosition()
const {
return _position; }
99 void setPosition(
const glm::vec3& position);
107 glm::quat getOrientation()
const {
return _orientation; }
115 void setOrientation(
const glm::quat& orientation);
123 bool getCaptureMouse()
const {
return _captureMouse; }
132 void setCaptureMouse(
bool captureMouse) { _captureMouse = captureMouse; emit captureMouseChanged(captureMouse); }
149 void setMouseLook(
bool mouseLook);
156 float getSensitivity()
const {
return _sensitivity; }
163 void setSensitivity(
float sensitivity) { _sensitivity = glm::max(0.0f, sensitivity); }
184 virtual PickRay computePickRay(
float x,
float y)
const = 0;
205 void lookAt(
const glm::vec3& position);
213 void keepLookingAt(
const glm::vec3& position);
219 void stopLooking() { _isKeepLookingAt =
false; }
234 void modeUpdated(
const QString& newMode);
248 void captureMouseChanged(
bool newCaptureMouse);
262 void mouseLookChanged(
bool newMouseLook);
268 CameraMode _mode{ CAMERA_MODE_LOOK_AT };
269 glm::mat4 _transform;
270 glm::mat4 _projection;
273 glm::vec3 _position { 0.0f, 0.0f, 0.0f };
274 glm::quat _orientation;
275 bool _isKeepLookingAt{
false };
276 glm::vec3 _lookingAt;
278 bool _captureMouse {
false };
279 float _sensitivity { 1.0f };
T get() const
Returns the value of the setting, or the default value if not found.
Definition: SettingHandle.h:240