terrain-gen/src/camera.h

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