fixed some graphical node issues
This commit is contained in:
parent
f0cd0fbace
commit
eb1e8d12de
@ -110,7 +110,8 @@ void Engine::setScene(SceneTree *scene)
|
|||||||
m_renderer->setScene(m_scene);
|
m_renderer->setScene(m_scene);
|
||||||
m_renderer->resizeGL(m_window->getSize().x, m_window->getSize().y);
|
m_renderer->resizeGL(m_window->getSize().x, m_window->getSize().y);
|
||||||
m_sparrowshell->setSceneTree(scene);
|
m_sparrowshell->setSceneTree(scene);
|
||||||
scene->addObject(scene->getRootObject(), m_sparrowshell);
|
scene->getRootObject()->addChild(m_sparrowshell);
|
||||||
|
scene->updateShaders();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Engine::outputShell(std::string str)
|
void Engine::outputShell(std::string str)
|
||||||
|
@ -5,6 +5,13 @@ GraphicalContainerNode::GraphicalContainerNode()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GraphicalContainerNode::setSceneTree(SceneTree* tree)
|
||||||
|
{
|
||||||
|
SceneNode::setSceneTree(tree);
|
||||||
|
for(auto child : m_children)
|
||||||
|
child->setSceneTree(tree);
|
||||||
|
}
|
||||||
|
|
||||||
void GraphicalContainerNode::addChild(GraphicalNode *node)
|
void GraphicalContainerNode::addChild(GraphicalNode *node)
|
||||||
{
|
{
|
||||||
if(node != nullptr)
|
if(node != nullptr)
|
||||||
|
@ -10,6 +10,10 @@ class GraphicalContainerNode : public GraphicalNode
|
|||||||
protected:
|
protected:
|
||||||
std::vector<GraphicalNode*> m_children;
|
std::vector<GraphicalNode*> m_children;
|
||||||
public:
|
public:
|
||||||
|
virtual void update() {}
|
||||||
|
|
||||||
|
virtual void setSceneTree(SceneTree* tree);
|
||||||
|
|
||||||
GraphicalContainerNode();
|
GraphicalContainerNode();
|
||||||
void addChild(GraphicalNode* node);
|
void addChild(GraphicalNode* node);
|
||||||
void removeChild(GraphicalNode* node);
|
void removeChild(GraphicalNode* node);
|
||||||
|
@ -16,7 +16,7 @@ public:
|
|||||||
GraphicalNode();
|
GraphicalNode();
|
||||||
|
|
||||||
void toggleVisibility();
|
void toggleVisibility();
|
||||||
void setSceneTree(SceneTree* tree);
|
virtual void setSceneTree(SceneTree* tree);
|
||||||
|
|
||||||
void setTransform(const glm::mat4 &transform) { m_transform = transform; }
|
void setTransform(const glm::mat4 &transform) { m_transform = transform; }
|
||||||
const glm::mat4& getTransform() { return m_transform; }
|
const glm::mat4& getTransform() { return m_transform; }
|
||||||
|
@ -11,10 +11,7 @@ class LightNode : public GraphicalNode
|
|||||||
public:
|
public:
|
||||||
LightNode(Light* light) : m_light(light) {}
|
LightNode(Light* light) : m_light(light) {}
|
||||||
|
|
||||||
virtual void update()
|
virtual void update() {}
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual Light* getLight() { return m_light; }
|
virtual Light* getLight() { return m_light; }
|
||||||
};
|
};
|
||||||
|
@ -43,13 +43,6 @@ void SceneTree::update()
|
|||||||
m_root.update();
|
m_root.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SceneTree::addObject(ContainerNode *parent, SceneNode *node)
|
|
||||||
{
|
|
||||||
parent->addChild(node);
|
|
||||||
node->setSceneTree(this);
|
|
||||||
((DeferredPipeline*) m_pipeline)->refreshScene(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SceneTree::addToIndex(SceneNode* node){
|
void SceneTree::addToIndex(SceneNode* node){
|
||||||
Light *light = node->getLight();
|
Light *light = node->getLight();
|
||||||
GeometryNode *geometrynode = node->getGeometryNode();
|
GeometryNode *geometrynode = node->getGeometryNode();
|
||||||
@ -76,3 +69,7 @@ void SceneTree::removeFromIndex(SceneNode *node){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SceneTree::updateShaders()
|
||||||
|
{
|
||||||
|
((DeferredPipeline*) m_pipeline)->refreshScene(this);
|
||||||
|
}
|
||||||
|
@ -33,10 +33,10 @@ public:
|
|||||||
void setMainCamera(CameraNode *camera);
|
void setMainCamera(CameraNode *camera);
|
||||||
|
|
||||||
ContainerNode* getRootObject(){return &m_root;}
|
ContainerNode* getRootObject(){return &m_root;}
|
||||||
void addObject(ContainerNode *parent, SceneNode *node);
|
|
||||||
void addToIndex(SceneNode* node);
|
void addToIndex(SceneNode* node);
|
||||||
void removeObject(ContainerNode* parent,SceneNode *node);
|
void removeObject(ContainerNode* parent,SceneNode *node);
|
||||||
void removeFromIndex(SceneNode *node);
|
void removeFromIndex(SceneNode *node);
|
||||||
|
void updateShaders();
|
||||||
private:
|
private:
|
||||||
ContainerNode m_root;
|
ContainerNode m_root;
|
||||||
std::vector<Light*> m_lights;
|
std::vector<Light*> m_lights;
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include <scene/textnode.h>
|
#include <scene/textnode.h>
|
||||||
#include <scene/cameranode.h>
|
#include <scene/cameranode.h>
|
||||||
#include <scene/lightnode.h>
|
#include <scene/lightnode.h>
|
||||||
|
#include <scene/graphicalcontainernode.h>
|
||||||
#include <tools/graph.h>
|
#include <tools/graph.h>
|
||||||
#include <tools/pathfinder.h>
|
#include <tools/pathfinder.h>
|
||||||
#include <tools/loader.h>
|
#include <tools/loader.h>
|
||||||
@ -89,20 +90,20 @@ public:
|
|||||||
float height = getHeight(x+6.7, z+15.7, 2.5f);
|
float height = getHeight(x+6.7, z+15.7, 2.5f);
|
||||||
height += getHeight(x+5.76, z+2.14, 5.4f);
|
height += getHeight(x+5.76, z+2.14, 5.4f);
|
||||||
height += getHeight(x, z, 10.f);
|
height += getHeight(x, z, 10.f);
|
||||||
return y - height;
|
return y+8.f - height;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void generateTerrain(SceneTree *scene)
|
void generateTerrain(SceneTree *scene)
|
||||||
{
|
{
|
||||||
ContainerNode* terrainContainer = new ContainerNode();
|
GraphicalContainerNode* terrainContainer = new GraphicalContainerNode();
|
||||||
scene->addObject(scene->getRootObject(), terrainContainer);
|
scene->getRootObject()->addChild(terrainContainer);
|
||||||
TestGen gen;
|
TestGen gen;
|
||||||
PhongMaterial *mat = new PhongMaterial();
|
PhongMaterial *mat = new PhongMaterial();
|
||||||
mat->emission = glm::vec3(0.5f, 0.1f, 0.1f);
|
mat->emission = glm::vec3(0.5f, 0.1f, 0.1f);
|
||||||
for(int x=-8; x<8; ++x)
|
for(int x=-6; x<6; ++x)
|
||||||
for(int y=-4; y<4; ++y)
|
for(int y=-3; y<3; ++y)
|
||||||
for(int z=-8; z<8; ++z)
|
for(int z=-6; z<6; ++z)
|
||||||
{
|
{
|
||||||
Chunk *chunk = new Chunk(&gen); // ! WARNING ! : chunk pointer is lost and never deleted
|
Chunk *chunk = new Chunk(&gen); // ! WARNING ! : chunk pointer is lost and never deleted
|
||||||
glm::vec3 pos(x, y, z);
|
glm::vec3 pos(x, y, z);
|
||||||
@ -114,8 +115,8 @@ void generateTerrain(SceneTree *scene)
|
|||||||
chunk->mesh->setMaterial(mat);
|
chunk->mesh->setMaterial(mat);
|
||||||
chunk->mesh->initGL();
|
chunk->mesh->initGL();
|
||||||
MeshNode *node = new MeshNode(chunk->mesh);
|
MeshNode *node = new MeshNode(chunk->mesh);
|
||||||
node->setTransform(glm::translate(glm::mat4(), pos*8.f));
|
node->setTransform(glm::translate(glm::scale(glm::mat4(), glm::vec3(2.f)), pos*8.f));
|
||||||
scene->addObject(terrainContainer, node);
|
terrainContainer->addChild(node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -130,13 +131,13 @@ int main(){
|
|||||||
|
|
||||||
CameraNode *cam = new CameraNode(engine.getInput());
|
CameraNode *cam = new CameraNode(engine.getInput());
|
||||||
cam->setInputs(myKeysMap::MOVE_CAMERA, myKeysMap::ROTATE_CAMERA);
|
cam->setInputs(myKeysMap::MOVE_CAMERA, myKeysMap::ROTATE_CAMERA);
|
||||||
scene.addObject(scene.getRootObject(), cam);
|
scene.getRootObject()->addChild(cam);
|
||||||
scene.setMainCamera(cam);
|
scene.setMainCamera(cam);
|
||||||
|
|
||||||
LightNode *sunLight = new LightNode(new DirectionnalLight(glm::vec3(5, 8, -2), glm::vec3(1.f)));
|
LightNode *sunLight = new LightNode(new DirectionnalLight(glm::vec3(5, 8, -2), glm::vec3(1.f)));
|
||||||
LightNode *ambientLight = new LightNode(new AmbientLight());
|
LightNode *ambientLight = new LightNode(new AmbientLight());
|
||||||
scene.addObject(scene.getRootObject(), ambientLight);
|
scene.getRootObject()->addChild(ambientLight);
|
||||||
scene.addObject(scene.getRootObject(), sunLight);
|
scene.getRootObject()->addChild(sunLight);
|
||||||
|
|
||||||
/* Exemple creation mesh 2D
|
/* Exemple creation mesh 2D
|
||||||
*
|
*
|
||||||
@ -147,13 +148,13 @@ int main(){
|
|||||||
mesh->setMaterial(mat);
|
mesh->setMaterial(mat);
|
||||||
mesh->setDepth(1);
|
mesh->setDepth(1);
|
||||||
mesh->initGL();
|
mesh->initGL();
|
||||||
scene.addObject(scene.getRootObject(),new MeshNode(mesh));
|
scene.getRootObject()->addChild(new MeshNode(mesh));
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Exemple ajout d'un objet a la scene
|
/* Exemple ajout d'un objet a la scene
|
||||||
*
|
*
|
||||||
SparrowShell *shell = new SparrowShell(engine.getWindow(),engine.getInput());
|
SparrowShell *shell = new SparrowShell(engine.getWindow(),engine.getInput());
|
||||||
scene.addObject(scene.getRootObject(),shell);
|
scene.getRootObject()->addChild(shell);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// the pipeline needs to updates his shaders because the scene changed
|
// the pipeline needs to updates his shaders because the scene changed
|
||||||
@ -165,13 +166,13 @@ int main(){
|
|||||||
RESOURCE_ADD(fonte_des_neiges,Font,"shellfont");
|
RESOURCE_ADD(fonte_des_neiges,Font,"shellfont");
|
||||||
|
|
||||||
TextNode* tnode/* = new MeshNode(fonte_des_neiges->getTextMesh("Hello World!"));
|
TextNode* tnode/* = new MeshNode(fonte_des_neiges->getTextMesh("Hello World!"));
|
||||||
scene.addObject(scene.getRootObject(),mnode)*/;
|
scene.getRootObject()->addChild(mnode)*/;
|
||||||
|
|
||||||
// mnode = new MeshNode(fonte_des_neiges->getTextMesh("Portez ce vieux whisky au juge blond qui fume.", glm::vec3(0.5, 0.7, 0.2)));
|
// mnode = new MeshNode(fonte_des_neiges->getTextMesh("Portez ce vieux whisky au juge blond qui fume.", glm::vec3(0.5, 0.7, 0.2)));
|
||||||
// mnode->setTransform(glm::rotate(glm::translate(glm::mat4(), glm::vec3(70, 30, 0)), 0.4f, glm::vec3(0, 0, 1)));
|
// mnode->setTransform(glm::rotate(glm::translate(glm::mat4(), glm::vec3(70, 30, 0)), 0.4f, glm::vec3(0, 0, 1)));
|
||||||
// utils::setPosition2D(mnode,glm::vec2(0, 400));
|
// utils::setPosition2D(mnode,glm::vec2(0, 400));
|
||||||
// utils::rotate2D(mnode, glm::vec2(10,10),0.5);
|
// utils::rotate2D(mnode, glm::vec2(10,10),0.5);
|
||||||
// scene.addObject(scene.getRootObject(),mnode);
|
// scene.getRootObject()->addChild(mnode);
|
||||||
|
|
||||||
tnode = fonte_des_neiges->getTextNode("Such Text", glm::vec3(0.7, 0.4, 0.2), 32.f);
|
tnode = fonte_des_neiges->getTextNode("Such Text", glm::vec3(0.7, 0.4, 0.2), 32.f);
|
||||||
|
|
||||||
@ -181,25 +182,24 @@ int main(){
|
|||||||
tnode->m_movement = glm::translate(glm::rotate(glm::translate(glm::mat4(), glm::vec3(240, 180, 0)), 0.03f, glm::vec3(0, 0, 1)), glm::vec3(-240, -180, 0));
|
tnode->m_movement = glm::translate(glm::rotate(glm::translate(glm::mat4(), glm::vec3(240, 180, 0)), 0.03f, glm::vec3(0, 0, 1)), glm::vec3(-240, -180, 0));
|
||||||
|
|
||||||
// mnode->setTransform(glm::rotate(glm::translate(glm::mat4(), glm::vec3(200, 170, 0)), -0.5f, glm::vec3(0, 0, 1)));
|
// mnode->setTransform(glm::rotate(glm::translate(glm::mat4(), glm::vec3(200, 170, 0)), -0.5f, glm::vec3(0, 0, 1)));
|
||||||
scene.addObject(scene.getRootObject(),(SceneNode*)tnode);
|
scene.getRootObject()->addChild((SceneNode*)tnode);
|
||||||
|
|
||||||
//tnode = fonte_des_neiges->getTextNode("Such Text", glm::vec3(0.7, 0.4, 0.2));
|
//tnode = fonte_des_neiges->getTextNode("Such Text", glm::vec3(0.7, 0.4, 0.2));
|
||||||
//tnode->setTransform(glm::rotate(glm::translate(glm::mat4(), glm::vec3(200, 170, 0)), -0.5f, glm::vec3(0, 0, 1)));
|
//tnode->setTransform(glm::rotate(glm::translate(glm::mat4(), glm::vec3(200, 170, 0)), -0.5f, glm::vec3(0, 0, 1)));
|
||||||
//scene.addObject(scene.getRootObject(),tnode);
|
//scene.getRootObject()->addChild(tnode);
|
||||||
|
|
||||||
|
|
||||||
// mnode = new MeshNode(fonte_des_neiges->getTextMesh("Very font", glm::vec3(0.7, 0.2, 0.8)));
|
// mnode = new MeshNode(fonte_des_neiges->getTextMesh("Very font", glm::vec3(0.7, 0.2, 0.8)));
|
||||||
// mnode->setTransform(glm::rotate(glm::translate(glm::mat4(), glm::vec3(180, 400, 0)), 0.1f, glm::vec3(0, 0, 1)));
|
// mnode->setTransform(glm::rotate(glm::translate(glm::mat4(), glm::vec3(180, 400, 0)), 0.1f, glm::vec3(0, 0, 1)));
|
||||||
// scene.addObject(scene.getRootObject(),mnode);
|
// scene.getRootObject()->addChild(mnode);
|
||||||
|
|
||||||
// mnode = new MeshNode(fonte_des_neiges->getTextMesh("Much animation", glm::vec3(0.3, 0.3, 0.8)));
|
// mnode = new MeshNode(fonte_des_neiges->getTextMesh("Much animation", glm::vec3(0.3, 0.3, 0.8)));
|
||||||
// mnode->setTransform(glm::translate(glm::mat4(), glm::vec3(400, 250, 0)));
|
// mnode->setTransform(glm::translate(glm::mat4(), glm::vec3(400, 250, 0)));
|
||||||
// mnode->m_movement = glm::translate(glm::rotate(glm::translate(glm::mat4(), glm::vec3(580, 280, 0)), 0.03f, glm::vec3(0, 0, 1)), glm::vec3(-580, -280, 0));
|
// mnode->m_movement = glm::translate(glm::rotate(glm::translate(glm::mat4(), glm::vec3(580, 280, 0)), 0.03f, glm::vec3(0, 0, 1)), glm::vec3(-580, -280, 0));
|
||||||
// scene.addObject(scene.getRootObject(),mnode);
|
// scene.getRootObject()->addChild(mnode);
|
||||||
|
|
||||||
generateTerrain(&scene);
|
generateTerrain(&scene);
|
||||||
|
|
||||||
|
|
||||||
engine.setScene(&scene);
|
engine.setScene(&scene);
|
||||||
|
|
||||||
engine.outputShell("Hello World!");
|
engine.outputShell("Hello World!");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user