49 lines
3.5 KiB
C++
49 lines
3.5 KiB
C++
#ifndef CAMERA_H
|
||
#define CAMERA_H
|
||
|
||
#include <GLM/glm.hpp>
|
||
|
||
// Ближняя граница области отсечения
|
||
#define CAMERA_NEAR 0.1f
|
||
// Дальняя граница области отсечения
|
||
#define CAMERA_FAR 100.0f
|
||
// Вектор, задающий верх для камеры
|
||
#define CAMERA_UP_VECTOR glm::vec3(0.0f, 1.0f, 0.0f)
|
||
// Стандартный угол обзора
|
||
#define CAMERA_FOVy 60.0f
|
||
|
||
class Camera
|
||
{
|
||
public:
|
||
Camera(float aspect, const glm::vec3 &position = glm::vec3(0.0f, 0.0f, 0.0f), const glm::vec2 &xyOffset = glm::vec2(90.0f, 0.0f), float fovy = CAMERA_FOVy); // Конструктор камеры с проекцией перспективы
|
||
Camera(float width, float height, const glm::vec3 &position = glm::vec3(0.0f, 0.0f, 0.0f), const glm::vec2 &xyOffset = glm::vec2(90.0f, 0.0f)); // Конструктор ортографической камеры
|
||
virtual ~Camera(); // Деструктор
|
||
const glm::mat4& getVP(); // Возвращает ссылку на константную матрицу произведения матриц вида и проекции
|
||
const glm::mat4& getProjection(); // Возвращает ссылку на константную матрицу проекции
|
||
const glm::mat4& getView(); // Возвращает ссылку на константную матрицу вида
|
||
void rotate(const glm::vec2 &xyOffset); // Поворачивает камеру на dx и dy пикселей
|
||
void move(const glm::vec3 &posOffset); // Сдвигает камеру на указанный вектор (dx,dy,dz)
|
||
void setPosition(const glm::vec3 &position); // Устанавливает местоположение
|
||
void setRotation(const glm::vec2 &xyOffset); // Устанавливает угол поворота камеры
|
||
void setPerspective(float fov, float aspect); // Устанавливает заданную матрицу перспективы
|
||
void setOrtho(float width, float height); // Устанавливает заданную ортографическую матрицу
|
||
void setSensitivity(float sensitivity); // Изменяет чувствительность мыши
|
||
protected:
|
||
Camera(const glm::vec3 &position, const glm::vec2 &xyOffset); // Защищенный (protected) констуктор камеры без перспективы
|
||
void recalcTarget(); // Пересчет цели, на которую смотрит камера
|
||
void recalcView(); // Пересчет матрицы вида
|
||
void recalcVP(); // Пересчет произведения матриц
|
||
|
||
glm::vec3 position; // Местоположение камеры
|
||
glm::vec3 target; // Цель, на которую смотрит камера
|
||
glm::vec2 currentRotation; // Текущий поворот камеры
|
||
glm::mat4 projection; // Матрица проекции
|
||
glm::mat4 view; // Матрица вида
|
||
glm::mat4 vp; // Матрица произведения вида и проекции
|
||
bool requiredRecalcVP; // Необходимость пересчета матрицы вида и проекции камеры
|
||
bool requiredRecalcView; // Необходимость пересчета матрицы вида камеры
|
||
float sensitivity; // Чувствительность мыши
|
||
};
|
||
|
||
|
||
#endif // CAMERA_H
|