71 lines
1.4 KiB
C++
71 lines
1.4 KiB
C++
#ifndef CAMERA_H
|
|
#define CAMERA_H
|
|
|
|
#include <cmath>
|
|
|
|
#include <QObject>
|
|
#include <QVector3D>
|
|
#include <QMatrix4x4>
|
|
#include <QOpenGLFunctions_4_5_Core>
|
|
|
|
#include "types.h"
|
|
#include "shader.h"
|
|
|
|
class Camera: public QObject, protected QOpenGLFunctions_4_5_Core
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
Camera(QVector3D position, QVector3D rotation);
|
|
QMatrix4x4 view() const;
|
|
QMatrix4x4 projection() const;
|
|
|
|
void rotateAroundY(float deltaAngleRad);
|
|
void rotateAroundX(float deltaAngleRad);
|
|
void moveZ(float deltaZ);
|
|
void moveX(float deltaX);
|
|
void moveY(float deltaY);
|
|
void setUniforms(Shader *program, RenderPassType renderPass);
|
|
void initGl();
|
|
|
|
private:
|
|
QVector3D m_position;
|
|
QVector3D m_right;
|
|
QVector3D m_front;
|
|
QVector3D m_up;
|
|
|
|
float m_xAngle;
|
|
float m_yAngle;
|
|
|
|
float m_fov;
|
|
float m_ratio;
|
|
float m_near;
|
|
float m_far;
|
|
|
|
QMatrix4x4 m_view;
|
|
QMatrix4x4 m_reflectedView;
|
|
QMatrix4x4 m_projection;
|
|
static QMatrix4x4 m_reflection;
|
|
|
|
|
|
void computeProjectionMatrix();
|
|
|
|
private slots:
|
|
void computeViewMatrix();
|
|
|
|
public slots:
|
|
void setRatio(float ratio);
|
|
void setX(double x);
|
|
void setY(double y);
|
|
void setZ(double z);
|
|
void setXAngleDegrees(double xAngle);
|
|
void setYAngleDegrees(double yAngle);
|
|
|
|
signals:
|
|
void updated();
|
|
void positionChanged(QVector3D newPosition);
|
|
void rotationXChanged(double newXAngleDeg);
|
|
void rotationYChanged(double newYAngleDeg);
|
|
};
|
|
|
|
#endif // CAMERA_H
|