From 795aac516d5e429a67d2330e0b0e157ee789cfa1 Mon Sep 17 00:00:00 2001 From: "re.kovalev" Date: Fri, 27 Oct 2023 12:21:57 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=81=D1=82=D1=83=D0=BF=20=D0=BA?= =?UTF-8?q?=20=D1=82=D0=B5=D0=BA=D1=83=D1=89=D0=B5=D0=B9=20=D0=B8=D1=81?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D1=83=D0=B5=D0=BC=D0=BE=D0=B9=20?= =?UTF-8?q?=D0=BA=D0=B0=D0=BC=D0=B5=D1=80=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/Camera.h | 6 +++++- src/Camera.cpp | 23 ++++++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) 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; +}