Камера как часть сцены
This commit is contained in:
parent
7e1ffdfdfb
commit
7dba133763
|
@ -4,6 +4,7 @@
|
||||||
#include <list>
|
#include <list>
|
||||||
|
|
||||||
#include "Model.h"
|
#include "Model.h"
|
||||||
|
#include "Camera.h"
|
||||||
|
|
||||||
// Класс сцены
|
// Класс сцены
|
||||||
class Scene
|
class Scene
|
||||||
|
@ -20,6 +21,7 @@ class Scene
|
||||||
// Списки объектов, выступающих узлами
|
// Списки объектов, выступающих узлами
|
||||||
std::list<Node> nodes; // Список пустых узлов
|
std::list<Node> nodes; // Список пустых узлов
|
||||||
std::list<Model> models; // Список моделей для рендера
|
std::list<Model> models; // Список моделей для рендера
|
||||||
|
std::list<Camera> cameras; // Список камер
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void rebuld_tree(const Scene& from); // Перестройка дерева после копирования или присваивания
|
void rebuld_tree(const Scene& from); // Перестройка дерева после копирования или присваивания
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#include "Camera.h"
|
#include "Camera.h"
|
||||||
|
|
||||||
// Защищенный (protected) конструктор камеры без перспективы
|
// Защищенный (protected) конструктор камеры без перспективы
|
||||||
Camera::Camera(const glm::vec3 &pos, const glm::vec3 &initialRotation)
|
Camera::Camera(const glm::vec3 &pos, const glm::vec3 &initialRotation) : Node(NULL) // Пусть по умолчанию камера не относится к сцене
|
||||||
{
|
{
|
||||||
sensitivity = CAMERA_DEFAULT_SENSIVITY;
|
sensitivity = CAMERA_DEFAULT_SENSIVITY;
|
||||||
position = pos; // задаем позицию
|
position = pos; // задаем позицию
|
||||||
|
@ -30,7 +30,7 @@ Camera::Camera(float width, float height, const glm::vec3 &position, const glm::
|
||||||
|
|
||||||
// Конструктор копирования камеры
|
// Конструктор копирования камеры
|
||||||
Camera::Camera(const Camera& copy)
|
Camera::Camera(const Camera& copy)
|
||||||
: projection(copy.projection), requiredRecalcVP(copy.requiredRecalcVP), sensitivity(copy.sensitivity)
|
: Node(copy), projection(copy.projection), requiredRecalcVP(copy.requiredRecalcVP), sensitivity(copy.sensitivity)
|
||||||
{
|
{
|
||||||
// Если у оригинала не было изменений - перепишем матрицу вида-проекции
|
// Если у оригинала не было изменений - перепишем матрицу вида-проекции
|
||||||
if (!requiredRecalcVP)
|
if (!requiredRecalcVP)
|
||||||
|
@ -40,6 +40,8 @@ Camera::Camera(const Camera& copy)
|
||||||
// Оператор присваивания
|
// Оператор присваивания
|
||||||
Camera& Camera::operator=(const Camera& other)
|
Camera& Camera::operator=(const Camera& other)
|
||||||
{
|
{
|
||||||
|
Node::operator=(other); // Вызов родительского оператора= для переноса узла
|
||||||
|
|
||||||
projection = other.projection;
|
projection = other.projection;
|
||||||
requiredRecalcVP = other.requiredRecalcVP;
|
requiredRecalcVP = other.requiredRecalcVP;
|
||||||
sensitivity = other.sensitivity;
|
sensitivity = other.sensitivity;
|
||||||
|
|
|
@ -3,12 +3,12 @@
|
||||||
// Конструктор пустой сцены
|
// Конструктор пустой сцены
|
||||||
Scene::Scene()
|
Scene::Scene()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Конструктор копирования
|
// Конструктор копирования
|
||||||
Scene::Scene(const Scene ©): root(copy.root),
|
Scene::Scene(const Scene ©): root(copy.root),
|
||||||
nodes(copy.nodes), models(copy.models)
|
nodes(copy.nodes), models(copy.models), cameras(copy.cameras)
|
||||||
{
|
{
|
||||||
rebuld_tree(copy);
|
rebuld_tree(copy);
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@ Scene& Scene::operator=(const Scene& other)
|
||||||
root = other.root;
|
root = other.root;
|
||||||
nodes = other.nodes;
|
nodes = other.nodes;
|
||||||
models = other.models;
|
models = other.models;
|
||||||
|
cameras = other.cameras;
|
||||||
|
|
||||||
rebuld_tree(other);
|
rebuld_tree(other);
|
||||||
|
|
||||||
|
@ -51,6 +52,10 @@ void Scene::rebuild_Nodes_list(T& nodes, const Scene& from)
|
||||||
// Если можно привести к модели, то ищем родителя среди моделей
|
// Если можно привести к модели, то ищем родителя среди моделей
|
||||||
if (dynamic_cast<Model*>(parent))
|
if (dynamic_cast<Model*>(parent))
|
||||||
move_parent(*it, from.models, this->models);
|
move_parent(*it, from.models, this->models);
|
||||||
|
else
|
||||||
|
// Иначе проверяем на принадлежность к камерам
|
||||||
|
if (dynamic_cast<Camera*>(parent))
|
||||||
|
move_parent(*it, from.cameras, this->cameras);
|
||||||
// Иначе это пустой узел
|
// Иначе это пустой узел
|
||||||
else
|
else
|
||||||
move_parent(*it, from.nodes, this->nodes);
|
move_parent(*it, from.nodes, this->nodes);
|
||||||
|
@ -80,4 +85,5 @@ void Scene::rebuld_tree(const Scene& from)
|
||||||
// Восстановим родителей в пустых узлах для копии
|
// Восстановим родителей в пустых узлах для копии
|
||||||
rebuild_Nodes_list(nodes, from);
|
rebuild_Nodes_list(nodes, from);
|
||||||
rebuild_Nodes_list(models, from);
|
rebuild_Nodes_list(models, from);
|
||||||
|
rebuild_Nodes_list(cameras, from);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue