Доступ к текущей используемой камере

This commit is contained in:
parent 7dba133763
commit 795aac516d
2 changed files with 27 additions and 2 deletions

View File

@ -41,6 +41,8 @@ class Camera : public Node
void setSensitivity(float sensitivity); // Изменяет чувствительность мыши void setSensitivity(float sensitivity); // Изменяет чувствительность мыши
const float& getSensitivity() const; // Возвращает чувствительность мыши const float& getSensitivity() const; // Возвращает чувствительность мыши
void use(); // Использование этой камеры как текущей
static Camera& current(); // Ссылка на текущую используемую камеру
protected: protected:
Camera(const glm::vec3 &position, const glm::vec3 &initialRotation); // Защищенный (protected) конструктор камеры без перспективы Camera(const glm::vec3 &position, const glm::vec3 &initialRotation); // Защищенный (protected) конструктор камеры без перспективы
@ -52,6 +54,8 @@ class Camera : public Node
float sensitivity; // Чувствительность мыши float sensitivity; // Чувствительность мыши
virtual void recalcMatrices(); // Метод пересчета матрицы вида и произведения Вида*Проекции по необходимости, должен сбрасывать флаг changed virtual void recalcMatrices(); // Метод пересчета матрицы вида и произведения Вида*Проекции по необходимости, должен сбрасывать флаг changed
static Camera* p_current; // Указатель на текущую используемую камеру
}; };

View File

@ -1,5 +1,8 @@
#include "Camera.h" #include "Camera.h"
// Указатель на текущую используемую камеру
Camera* Camera::p_current = NULL;
// Защищенный (protected) конструктор камеры без перспективы // Защищенный (protected) конструктор камеры без перспективы
Camera::Camera(const glm::vec3 &pos, const glm::vec3 &initialRotation) : Node(NULL) // Пусть по умолчанию камера не относится к сцене Camera::Camera(const glm::vec3 &pos, const glm::vec3 &initialRotation) : Node(NULL) // Пусть по умолчанию камера не относится к сцене
{ {
@ -56,7 +59,8 @@ Camera& Camera::operator=(const Camera& other)
// Деструктор // Деструктор
Camera::~Camera() Camera::~Camera()
{ {
if (p_current == this)
p_current = NULL;
} }
// Возвращает ссылку на константную матрицу проекции // Возвращает ссылку на константную матрицу проекции
@ -160,3 +164,20 @@ void Camera::rotate(const glm::vec2 &xyOffset)
changed = true; changed = true;
invalidateParent(); // Проход потомков в глубину с изменением флага parent_changed 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;
}