diff --git a/include/Camera.h b/include/Camera.h index 64912be..73840de 100644 --- a/include/Camera.h +++ b/include/Camera.h @@ -41,6 +41,8 @@ class Camera : public Node void setSensitivity(float sensitivity); // Изменяет чувствительность мыши const float& getSensitivity() const; // Возвращает чувствительность мыши + void use(); // Использование этой камеры как текущей + static Camera& current(); // Ссылка на текущую используемую камеру protected: Camera(const glm::vec3 &position, const glm::vec3 &initialRotation); // Защищенный (protected) конструктор камеры без перспективы @@ -52,7 +54,9 @@ class Camera : public Node float sensitivity; // Чувствительность мыши virtual void recalcMatrices(); // Метод пересчета матрицы вида и произведения Вида*Проекции по необходимости, должен сбрасывать флаг changed -}; + + static Camera* p_current; // Указатель на текущую используемую камеру +}; #endif // CAMERA_H \ No newline at end of file diff --git a/src/Camera.cpp b/src/Camera.cpp index ba1f8ad..6fb0fb2 100644 --- a/src/Camera.cpp +++ b/src/Camera.cpp @@ -1,5 +1,8 @@ #include "Camera.h" +// Указатель на текущую используемую камеру +Camera* Camera::p_current = NULL; + // Защищенный (protected) конструктор камеры без перспективы Camera::Camera(const glm::vec3 &pos, const glm::vec3 &initialRotation) : Node(NULL) // Пусть по умолчанию камера не относится к сцене { @@ -56,7 +59,8 @@ Camera& Camera::operator=(const Camera& other) // Деструктор Camera::~Camera() { - + if (p_current == this) + p_current = NULL; } // Возвращает ссылку на константную матрицу проекции @@ -160,3 +164,20 @@ void Camera::rotate(const glm::vec2 &xyOffset) changed = true; invalidateParent(); // Проход потомков в глубину с изменением флага parent_changed } + +// Использование этой камеры как текущей +void Camera::use() +{ + p_current = this; +} + +// Ссылка на текущую используемую камеру +Camera& Camera::current() +{ + static Camera default_cam(800.0f/600.0f); + + if (!p_current) + return default_cam; + else + return *p_current; +}