Gem Illuminator
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Macros
camera.h
Go to the documentation of this file.
1 #ifndef CAMERA_H
2 #define CAMERA_H
3 
4 #include <QObject>
5 #include <QSize>
6 #include <QVector3D>
7 
8 class QMatrix4x4;
9 
16 class Camera : public QObject
17 {
18  Q_OBJECT
19  Q_PROPERTY(const QVector3D &eye READ eye WRITE setEye)
20  Q_PROPERTY(const QVector3D &center READ center WRITE setCenter)
21  Q_PROPERTY(const QVector3D &up READ up WRITE setUp)
22  Q_PROPERTY(const QVector3D &position READ position WRITE setPosition)
23  Q_PROPERTY(const QVector3D &viewDirection READ viewDirection WRITE setViewDirection)
24  Q_PROPERTY(const QSize &viewport READ viewport WRITE setViewport)
25  Q_PROPERTY(qreal zNear READ zNear WRITE setZNear)
26  Q_PROPERTY(qreal zFar READ zFar WRITE setZFar)
27  Q_PROPERTY(qreal fovy READ fovy WRITE setFovy)
28 
29 public:
30  explicit Camera(QObject *parent = 0);
31 
36  Camera(const Camera &camera, QObject *parent = 0);
37  virtual ~Camera();
38 
39  const QMatrix4x4 &view() const;
40  const QMatrix4x4 &viewInverted() const;
41  const QMatrix4x4 &viewProjection() const;
42  const QMatrix4x4 &viewProjectionInverted() const;
43  const QMatrix4x4 &projection() const;
44  const QMatrix4x4 &projectionInverted() const;
45 
46  const QVector3D &position() const;
47  QVector3D viewDirection() const;
48  const QVector3D &center() const;
49  const QVector3D &eye() const;
50  const QVector3D &up() const;
51 
52  const QSize &viewport() const;
53  float fovy() const;
54  float zNear() const;
55  float zFar() const;
56 
57 signals:
58  void viewChanged();
59 
60 public slots:
65  void setPosition(const QVector3D &position);
70  void setViewDirection(const QVector3D &viewDirection);
75  void setEye(const QVector3D &eye);
80  void setCenter(const QVector3D &center);
85  void setUp(const QVector3D &up);
92  void setView(const QVector3D &eye, const QVector3D &center, const QVector3D &up);
93 
94  void setViewport(const QSize &viewport);
95  void setViewport(int x, int y);
96  void setFovy(float angle);
97  void setZNear(float zNear);
98  void setZFar(float zFar);
99 
100 protected:
101  void invalidateView() const;
102  void invalidateProjection() const;
103  void recalculateView() const;
104  void recalculateProjection() const;
105  void recalculateViewProjection() const;
106 
107 protected:
108  QVector3D *m_eye;
109  QVector3D *m_center;
110  QVector3D *m_up;
111  QSize *m_viewport;
112  float m_zNear;
113  float m_zFar;
114  float m_fovy;
115 
116  mutable QMatrix4x4 *m_view;
117  mutable QMatrix4x4 *m_viewInverted;
118  mutable QMatrix4x4 *m_projection;
119  mutable QMatrix4x4 *m_projectionInverted;
120  mutable QMatrix4x4 *m_viewProjection;
121  mutable QMatrix4x4 *m_viewProjectionInverted;
122 
123  mutable bool m_isViewInvalid;
124  mutable bool m_isProjectionInvalid;
126 };
127 
128 #endif // CAMERA_H
const QMatrix4x4 & viewInverted() const
Definition: camera.cpp:98
const QVector3D & eye() const
void setZNear(float zNear)
Definition: camera.cpp:261
const QMatrix4x4 & viewProjection() const
Definition: camera.cpp:106
const QMatrix4x4 & view() const
Definition: camera.cpp:90
void setUp(const QVector3D &up)
Sets up-vector of camera.
Definition: camera.cpp:222
bool m_isViewInvalid
Definition: camera.h:123
const QSize & viewport() const
float fovy() const
float m_zFar
Definition: camera.h:113
QMatrix4x4 * m_view
Definition: camera.h:116
void recalculateProjection() const
Definition: camera.cpp:69
QSize * m_viewport
Definition: camera.h:111
QVector3D * m_eye
Definition: camera.h:108
void viewChanged()
float zFar() const
The Camera class provides view and perspective projection matrices. Additional the viewport of camera...
Definition: camera.h:16
void setView(const QVector3D &eye, const QVector3D &center, const QVector3D &up)
Convenience method to specify view with one method call.
Definition: camera.cpp:231
bool m_isViewProjectionInvalid
Definition: camera.h:125
QVector3D * m_center
Definition: camera.h:109
void setEye(const QVector3D &eye)
Sets eye (position) of camera to given value. center() will not be changed, so viewDirection() is set...
Definition: camera.cpp:204
void setPosition(const QVector3D &position)
Sets position of camera to given value. center() will be changed in order to keep viewDirection() the...
Definition: camera.cpp:183
void setZFar(float zFar)
Definition: camera.cpp:270
QVector3D * m_up
Definition: camera.h:110
bool m_isProjectionInvalid
Definition: camera.h:124
QMatrix4x4 * m_viewInverted
Definition: camera.h:117
const QMatrix4x4 & projection() const
Definition: camera.cpp:122
const QVector3D & position() const
void setViewDirection(const QVector3D &viewDirection)
Sets viewDirection of camera to given vector. center() will be changed in order to keep eye() consist...
Definition: camera.cpp:195
Camera(QObject *parent=0)
Definition: camera.cpp:5
void invalidateProjection() const
Definition: camera.cpp:285
void setCenter(const QVector3D &center)
Sets center of camera to given value. viewDirection() will be set to new center() - eye()...
Definition: camera.cpp:213
float m_fovy
Definition: camera.h:114
float m_zNear
Definition: camera.h:112
QMatrix4x4 * m_viewProjection
Definition: camera.h:120
QMatrix4x4 * m_projection
Definition: camera.h:118
virtual ~Camera()
Definition: camera.cpp:47
QMatrix4x4 * m_projectionInverted
Definition: camera.h:119
void setViewport(const QSize &viewport)
Definition: camera.cpp:238
QMatrix4x4 * m_viewProjectionInverted
Definition: camera.h:121
const QVector3D & center() const
void recalculateViewProjection() const
Definition: camera.cpp:77
void recalculateView() const
Definition: camera.cpp:61
QVector3D viewDirection() const
const QVector3D & up() const
const QMatrix4x4 & viewProjectionInverted() const
Definition: camera.cpp:114
float zNear() const
void setFovy(float angle)
Definition: camera.cpp:252
void invalidateView() const
Definition: camera.cpp:279
const QMatrix4x4 & projectionInverted() const
Definition: camera.cpp:130