From e4dcab14d944bbf9f33bc2cffc9b1af3b907e6d5 Mon Sep 17 00:00:00 2001 From: Lendemor Date: Wed, 7 Dec 2016 18:35:19 +0100 Subject: [PATCH] added implementation of graphicalnode --- src/scene/graphicalcontainernode.cpp | 6 ++++++ src/scene/graphicalcontainernode.h | 16 ++++++++++++++++ src/scene/graphicalnode.cpp | 22 ++++++++++++++++++++++ src/scene/graphicalnode.h | 25 +++++++++++++++++++++++++ src/scene/lightnode.cpp | 13 ------------- src/scene/lightnode.h | 11 +++-------- src/scene/meshnode.cpp | 15 --------------- src/scene/meshnode.h | 12 ++++-------- src/scene/scenetree.cpp | 1 + 9 files changed, 77 insertions(+), 44 deletions(-) create mode 100644 src/scene/graphicalcontainernode.cpp create mode 100644 src/scene/graphicalcontainernode.h create mode 100644 src/scene/graphicalnode.cpp create mode 100644 src/scene/graphicalnode.h diff --git a/src/scene/graphicalcontainernode.cpp b/src/scene/graphicalcontainernode.cpp new file mode 100644 index 0000000..fda6302 --- /dev/null +++ b/src/scene/graphicalcontainernode.cpp @@ -0,0 +1,6 @@ +#include "graphicalcontainernode.h" + +GraphicalContainerNode::GraphicalContainerNode() +{ + +} diff --git a/src/scene/graphicalcontainernode.h b/src/scene/graphicalcontainernode.h new file mode 100644 index 0000000..ada5315 --- /dev/null +++ b/src/scene/graphicalcontainernode.h @@ -0,0 +1,16 @@ +#ifndef GRAPHICALCONTAINERNODE_H +#define GRAPHICALCONTAINERNODE_H + +#include "graphicalnode.h" +#include "glm/mat4x4.hpp" +#include + +class GraphicalContainerNode : public GraphicalNode +{ +protected: + std::vector m_children; +public: + GraphicalContainerNode(); +}; + +#endif // GRAPHICALCONTAINERNODE_H diff --git a/src/scene/graphicalnode.cpp b/src/scene/graphicalnode.cpp new file mode 100644 index 0000000..6e5f4b1 --- /dev/null +++ b/src/scene/graphicalnode.cpp @@ -0,0 +1,22 @@ +#include "graphicalnode.h" +#include "scenetree.h" + +GraphicalNode::GraphicalNode() +{ + +} + +void GraphicalNode::setSceneTree(SceneTree *tree){ + SceneNode::setSceneTree(tree); + if (tree) + tree->addToIndex(this); +} + +void GraphicalNode::toggleVisibility(){ + m_visible = !m_visible; + if(m_visible){ + m_scene->addToIndex(this); + }else{ + m_scene->removeFromIndex(this); + } +} diff --git a/src/scene/graphicalnode.h b/src/scene/graphicalnode.h new file mode 100644 index 0000000..b3f5d81 --- /dev/null +++ b/src/scene/graphicalnode.h @@ -0,0 +1,25 @@ +#ifndef GRAPHICALNODE_H +#define GRAPHICALNODE_H + +#include "scenenode.h" +#include "glm/mat4x4.hpp" + +class SceneTree; + +class GraphicalNode : public SceneNode +{ +private: + glm::mat4 m_transform; +protected: + bool m_visible; +public: + GraphicalNode(); + + void toggleVisibility(); + void setSceneTree(SceneTree* tree); + + void setTransform(const glm::mat4 &transform) { m_transform = transform; } + const glm::mat4& getTransform() { return m_transform; } +}; + +#endif // GRAPHICALNODE_H diff --git a/src/scene/lightnode.cpp b/src/scene/lightnode.cpp index 7447f34..ed9155c 100644 --- a/src/scene/lightnode.cpp +++ b/src/scene/lightnode.cpp @@ -2,16 +2,3 @@ #include "scenetree.h" #include -void LightNode::setSceneTree(SceneTree *tree){ - SceneNode::setSceneTree(tree); - tree->addToIndex(this); -} - -void LightNode::toggleVisibility(){ - m_visible = !m_visible; - if(m_visible){ - m_scene->addToIndex(this); - }else{ - m_scene->removeFromIndex(this); - } -} diff --git a/src/scene/lightnode.h b/src/scene/lightnode.h index 2cafabf..f03379d 100644 --- a/src/scene/lightnode.h +++ b/src/scene/lightnode.h @@ -1,26 +1,21 @@ #ifndef LIGHTNODE_H #define LIGHTNODE_H -#include "scenenode.h" +#include "graphicalnode.h" #include "glm/mat4x4.hpp" #include "scene.h" -class LightNode : public SceneNode +class LightNode : public GraphicalNode { Light *m_light; - bool m_visible; public: - LightNode(Light* light) : m_light(light), m_visible(true) {} + LightNode(Light* light) : m_light(light) {GraphicalNode::m_visible = true;} virtual void update() { } - virtual void setSceneTree(SceneTree *tree); - - void toggleVisibility(); - virtual Light* getLight() { return m_light; } }; diff --git a/src/scene/meshnode.cpp b/src/scene/meshnode.cpp index e4cd7b7..913a875 100644 --- a/src/scene/meshnode.cpp +++ b/src/scene/meshnode.cpp @@ -5,18 +5,3 @@ void MeshNode::setDepth(float depth){ m_geometry.mesh->setDepth(depth); } - -void MeshNode::setSceneTree(SceneTree *tree){ - SceneNode::setSceneTree(tree); - if (tree) - tree->addToIndex(this); -} - -void MeshNode::toggleVisibility(){ - m_visible = !m_visible; - if(m_visible){ - m_scene->addToIndex(this); - }else{ - m_scene->removeFromIndex(this); - } -} diff --git a/src/scene/meshnode.h b/src/scene/meshnode.h index 7dddf45..7708063 100644 --- a/src/scene/meshnode.h +++ b/src/scene/meshnode.h @@ -1,7 +1,7 @@ #ifndef MESHNODE_H #define MESHNODE_H -#include "scenenode.h" +#include "graphicalnode.h" #include "glm/mat4x4.hpp" #include "scene.h" @@ -9,16 +9,16 @@ * @brief The MeshNode class holds a mesh */ -class MeshNode : public SceneNode +class MeshNode : public GraphicalNode + { GeometryNode m_geometry; - bool m_visible; public: // temp glm::mat4 m_movement; glm::mat4 m_acceleration; - MeshNode(Mesh* mesh) : m_geometry(mesh, glm::mat4()), m_visible(true) {} + MeshNode(Mesh* mesh) : m_geometry(mesh, glm::mat4()) {GraphicalNode::m_visible = true;} virtual void update() { @@ -26,14 +26,10 @@ public: m_geometry.modelMatrix = m_movement * m_geometry.modelMatrix; } - virtual void setSceneTree(SceneTree *tree); - void setTransform(const glm::mat4 &transform) { m_geometry.modelMatrix = transform; } const glm::mat4& getTransform() { return m_geometry.modelMatrix; } void setDepth(float depth); - void toggleVisibility(); - virtual GeometryNode* getGeometryNode() { return &m_geometry; } }; diff --git a/src/scene/scenetree.cpp b/src/scene/scenetree.cpp index bf4d6b0..f0dadf1 100644 --- a/src/scene/scenetree.cpp +++ b/src/scene/scenetree.cpp @@ -15,6 +15,7 @@ SceneTree::SceneTree() : DeferredPipeline *pipeline = new DeferredPipeline(); m_pipeline = pipeline; pipeline->setRenderTarget(FrameBuffer::screen); + m_root.setSceneTree(this); } SceneTree::~SceneTree()