added folder scene for differents nodes
This commit is contained in:
parent
2705651565
commit
ea06b027f8
@ -7,8 +7,8 @@ SET(VERSION_MINOR 1)
|
||||
set(EXTRA_INCLUDES ${PROJECT_SOURCE_DIR}/src)
|
||||
|
||||
# choose source file
|
||||
file(GLOB LIB_SRC_LIST src/*.cpp src/tools/*.cpp)
|
||||
file(GLOB LIB_HEAD_LIST src/*.h src/tools/*.h)
|
||||
file(GLOB LIB_SRC_LIST src/*.cpp src/tools/*.cpp src/scene/*.cpp)
|
||||
file(GLOB LIB_HEAD_LIST src/*.h src/tools/*.h src/scene/*.h)
|
||||
set(EXEC_SRC_LIST src/test/main.cpp)
|
||||
|
||||
#set compilation option
|
||||
|
@ -8,7 +8,7 @@
|
||||
#include <btBulletCollisionCommon.h>
|
||||
#include <btBulletDynamicsCommon.h>
|
||||
#include "resourcemanager.h"
|
||||
#include "scenetree.h"
|
||||
#include "scene/scenetree.h"
|
||||
#include "sparrowshell.h"
|
||||
|
||||
Engine::Engine() :
|
||||
@ -108,6 +108,7 @@ void Engine::setScene(SceneTree *scene)
|
||||
m_scene = scene;
|
||||
m_renderer->setScene(m_scene);
|
||||
m_renderer->resizeGL(m_window->getSize().x, m_window->getSize().y);
|
||||
m_sparrowshell->setScene(scene);
|
||||
scene->addObject(scene->getRootObject(), m_sparrowshell);
|
||||
}
|
||||
|
||||
|
1
src/scene/cameranode.cpp
Normal file
1
src/scene/cameranode.cpp
Normal file
@ -0,0 +1 @@
|
||||
#include "cameranode.h"
|
16
src/scene/cameranode.h
Normal file
16
src/scene/cameranode.h
Normal file
@ -0,0 +1,16 @@
|
||||
#ifndef CAMERANODE_H
|
||||
#define CAMERANODE_H
|
||||
|
||||
#include "scenenode.h"
|
||||
#include "trackballcamera.h"
|
||||
|
||||
/**
|
||||
* @brief The CameraNode class is a scene node that can be used by the renderer
|
||||
*/
|
||||
class CameraNode : public TrackBallCamera, SceneNode
|
||||
{
|
||||
public:
|
||||
CameraNode() {}
|
||||
};
|
||||
|
||||
#endif // CAMERANODE_H
|
39
src/scene/containernode.cpp
Normal file
39
src/scene/containernode.cpp
Normal file
@ -0,0 +1,39 @@
|
||||
#include "containernode.h"
|
||||
|
||||
// Container Node
|
||||
void ContainerNode::update()
|
||||
{
|
||||
for(SceneNode* sn : m_children)
|
||||
sn->update();
|
||||
}
|
||||
|
||||
void ContainerNode::addChild(SceneNode* node)
|
||||
{
|
||||
if(node != nullptr)
|
||||
{
|
||||
m_children.push_back(node);
|
||||
node->m_parent = this;
|
||||
}
|
||||
}
|
||||
|
||||
void ContainerNode::removeChild(SceneNode* node)
|
||||
{
|
||||
if(node != nullptr)
|
||||
{
|
||||
for(auto it = m_children.begin(); it != m_children.end(); ++it)
|
||||
{
|
||||
if(*it == node)
|
||||
{
|
||||
m_children.erase(it);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ContainerNode::setSceneTree(SceneTree *tree)
|
||||
{
|
||||
SceneNode::setSceneTree(tree);
|
||||
for(auto child : m_children)
|
||||
child->setSceneTree(tree);
|
||||
}
|
34
src/scene/containernode.h
Normal file
34
src/scene/containernode.h
Normal file
@ -0,0 +1,34 @@
|
||||
#ifndef CONTAINERNODE_H
|
||||
#define CONTAINERNODE_H
|
||||
|
||||
#include "scenenode.h"
|
||||
#include <vector>
|
||||
|
||||
/**
|
||||
* @brief The ContainerNode class represents a node which main use is to contain a collection of nodes
|
||||
*/
|
||||
class ContainerNode : public SceneNode
|
||||
{
|
||||
public:
|
||||
virtual void update();
|
||||
/**
|
||||
* @brief addChild adds node in the ContainerNode's children list
|
||||
*/
|
||||
void addChild(SceneNode* node);
|
||||
|
||||
/**
|
||||
* @brief removeChild removes the first iteration of node of the children list
|
||||
*/
|
||||
void removeChild(SceneNode* node);
|
||||
/**
|
||||
* @brief addedToSceneTree is called when this node is added to a SceneTree
|
||||
*
|
||||
* @param tree
|
||||
*/
|
||||
void setSceneTree(SceneTree *tree);
|
||||
|
||||
protected:
|
||||
std::vector<SceneNode*> m_children;
|
||||
};
|
||||
|
||||
#endif // CONTAINERNODE_H
|
12
src/scene/meshnode.cpp
Normal file
12
src/scene/meshnode.cpp
Normal file
@ -0,0 +1,12 @@
|
||||
#include "meshnode.h"
|
||||
#include "mesh.h"
|
||||
#include "scenetree.h"
|
||||
|
||||
void MeshNode::setDepth(float depth){
|
||||
geometry.mesh->setDepth(depth);
|
||||
}
|
||||
|
||||
void MeshNode::setSceneTree(SceneTree *tree){
|
||||
SceneNode::setSceneTree(tree);
|
||||
tree->addToIndex(this);
|
||||
}
|
37
src/scene/meshnode.h
Normal file
37
src/scene/meshnode.h
Normal file
@ -0,0 +1,37 @@
|
||||
#ifndef MESHNODE_H
|
||||
#define MESHNODE_H
|
||||
|
||||
#include "scenenode.h"
|
||||
#include "glm/mat4x4.hpp"
|
||||
#include "scene.h"
|
||||
|
||||
/**
|
||||
* @brief The MeshNode class holds a mesh
|
||||
*/
|
||||
|
||||
class MeshNode : public SceneNode
|
||||
{
|
||||
GeometryNode geometry;
|
||||
public:
|
||||
// temp
|
||||
glm::mat4 m_movement;
|
||||
glm::mat4 m_acceleration;
|
||||
|
||||
MeshNode(Mesh* mesh) : geometry(mesh, glm::mat4()) {}
|
||||
|
||||
virtual void update()
|
||||
{
|
||||
m_movement = m_acceleration * m_movement;
|
||||
geometry.modelMatrix = m_movement * geometry.modelMatrix;
|
||||
}
|
||||
|
||||
void setSceneTree(SceneTree *tree);
|
||||
|
||||
void setTransform(const glm::mat4 &transform) { geometry.modelMatrix = transform; }
|
||||
const glm::mat4& getTransform() { return geometry.modelMatrix; }
|
||||
void setDepth(float depth);
|
||||
|
||||
GeometryNode* getGeometryNode() { return &geometry; }
|
||||
};
|
||||
|
||||
#endif // MESHNODE_H
|
19
src/scene/scenenode.h
Normal file
19
src/scene/scenenode.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef SCENENODE_H
|
||||
#define SCENENODE_H
|
||||
|
||||
class SceneTree;
|
||||
class Light;
|
||||
class GeometryNode;
|
||||
|
||||
class SceneNode
|
||||
{
|
||||
public:
|
||||
SceneNode* m_parent;
|
||||
SceneTree* m_scene;
|
||||
virtual void update() = 0;
|
||||
virtual Light* getLight() {return nullptr;}
|
||||
virtual GeometryNode* getGeometryNode() {return nullptr;}
|
||||
virtual void setSceneTree(SceneTree* tree){m_scene = tree;}
|
||||
};
|
||||
|
||||
#endif // SCENENODE_H
|
@ -1,10 +1,12 @@
|
||||
#include "scenetree.h"
|
||||
#include "scene/scenetree.h"
|
||||
#include "resourcemanager.h"
|
||||
#include <pipeline.h>
|
||||
#include <deferredpipeline.h>
|
||||
#include <algorithm>
|
||||
// Scene
|
||||
#include <mesh.h>
|
||||
#include <iostream>
|
||||
#include "scene/scenenode.h"
|
||||
|
||||
SceneTree::SceneTree() :
|
||||
Scene(),
|
||||
@ -44,7 +46,7 @@ void SceneTree::addObject(ContainerNode *parent, SceneNode *node)
|
||||
{
|
||||
parent->addChild(node);
|
||||
addToIndex(node);
|
||||
node->addedToSceneTree(this);
|
||||
node->setSceneTree(this);
|
||||
((DeferredPipeline*) m_pipeline)->refreshScene(this);
|
||||
}
|
||||
|
||||
@ -74,43 +76,3 @@ void SceneTree::removeFromIndex(SceneNode *node){
|
||||
}
|
||||
}
|
||||
|
||||
// Container Node
|
||||
|
||||
void ContainerNode::update()
|
||||
{
|
||||
for(SceneNode* sn : m_children)
|
||||
sn->update();
|
||||
}
|
||||
|
||||
void ContainerNode::addChild(SceneNode* node)
|
||||
{
|
||||
if(node != NULL)
|
||||
{
|
||||
m_children.push_back(node);
|
||||
node->m_parent = this;
|
||||
}
|
||||
}
|
||||
|
||||
void ContainerNode::removeChild(SceneNode* node)
|
||||
{
|
||||
if(node != NULL)
|
||||
{
|
||||
for(auto it = m_children.begin(); it != m_children.end(); ++it)
|
||||
{
|
||||
if(*it == node)
|
||||
{
|
||||
m_children.erase(it);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ContainerNode::addedToSceneTree(SceneTree *tree)
|
||||
{
|
||||
for(auto child : m_children)
|
||||
{
|
||||
tree->addToIndex(child);
|
||||
child->addedToSceneTree(tree);
|
||||
}
|
||||
}
|
47
src/scene/scenetree.h
Normal file
47
src/scene/scenetree.h
Normal file
@ -0,0 +1,47 @@
|
||||
#ifndef SCENETREE_H
|
||||
#define SCENETREE_H
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include "scene.h"
|
||||
#include "light.h"
|
||||
#include "resourcemanager.h"
|
||||
|
||||
#include "containernode.h"
|
||||
|
||||
class CameraNode;
|
||||
|
||||
/**
|
||||
* @brief The SceneNode class represents a class of the game
|
||||
* that will be updated or used for rendering every frame
|
||||
*/
|
||||
|
||||
class SceneTree : public Scene
|
||||
{
|
||||
public:
|
||||
SceneTree();
|
||||
~SceneTree();
|
||||
|
||||
virtual SceneIterator<Light*>* getLights();
|
||||
virtual SceneIterator<GeometryNode*>* getGeometry();
|
||||
|
||||
void update();
|
||||
|
||||
Texture* getSkybox() {return m_skybox;}
|
||||
void setSkybox(Texture* skybox) {m_skybox = skybox;}
|
||||
|
||||
void setMainCamera(CameraNode *camera);
|
||||
|
||||
ContainerNode* getRootObject(){return &m_root;}
|
||||
void addObject(ContainerNode *parent, SceneNode *node);
|
||||
void addToIndex(SceneNode* node);
|
||||
void removeObject(ContainerNode* parent,SceneNode *node);
|
||||
void removeFromIndex(SceneNode *node);
|
||||
private:
|
||||
ContainerNode m_root;
|
||||
std::vector<Light*> m_lights;
|
||||
std::vector<GeometryNode*> m_geometries;
|
||||
Texture* m_skybox;
|
||||
};
|
||||
|
||||
#endif // SCENETREE_H
|
6
src/scene/textnode.cpp
Normal file
6
src/scene/textnode.cpp
Normal file
@ -0,0 +1,6 @@
|
||||
#include "textnode.h"
|
||||
|
||||
/*TextNode::TextNode()
|
||||
{
|
||||
|
||||
}*/
|
15
src/scene/textnode.h
Normal file
15
src/scene/textnode.h
Normal file
@ -0,0 +1,15 @@
|
||||
#ifndef TEXTNODE_H
|
||||
#define TEXTNODE_H
|
||||
|
||||
#include "meshnode.h"
|
||||
|
||||
class TextNode : public MeshNode
|
||||
{
|
||||
private:
|
||||
float m_fontSize;
|
||||
public:
|
||||
TextNode(Mesh* mesh,float fontSize) : MeshNode(mesh),m_fontSize(fontSize) {}
|
||||
float getFontSize(){return m_fontSize;}
|
||||
};
|
||||
|
||||
#endif // TEXTNODE_H
|
119
src/scenetree.h
119
src/scenetree.h
@ -1,119 +0,0 @@
|
||||
#ifndef SCENETREE_H
|
||||
#define SCENETREE_H
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include "scene.h"
|
||||
#include "light.h"
|
||||
#include "resourcemanager.h"
|
||||
#include <trackballcamera.h>
|
||||
|
||||
class SceneTree;
|
||||
|
||||
/**
|
||||
* @brief The SceneNode class represents a class of the game
|
||||
* that will be updated or used for rendering every frame
|
||||
*/
|
||||
class SceneNode
|
||||
{
|
||||
public:
|
||||
SceneNode* m_parent;
|
||||
virtual void update() = 0;
|
||||
virtual Light* getLight() {return nullptr;}
|
||||
virtual GeometryNode* getGeometryNode() {return nullptr;}
|
||||
virtual void addedToSceneTree(SceneTree* tree){}
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief The ContainerNode class represents a node which main use is to contain a collection of nodes
|
||||
*/
|
||||
class ContainerNode : public SceneNode
|
||||
{
|
||||
public:
|
||||
virtual void update();
|
||||
|
||||
/**
|
||||
* @brief addChild adds node in the ContainerNode's children list
|
||||
*/
|
||||
void addChild(SceneNode* node);
|
||||
|
||||
/**
|
||||
* @brief removeChild removes the first iteration of node of the children list
|
||||
*/
|
||||
void removeChild(SceneNode* node);
|
||||
/**
|
||||
* @brief addedToSceneTree is called when this node is added to a SceneTree
|
||||
*
|
||||
* @param tree
|
||||
*/
|
||||
void addedToSceneTree(SceneTree *tree);
|
||||
|
||||
protected:
|
||||
std::vector<SceneNode*> m_children;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief The MeshNode class holds a mesh
|
||||
*/
|
||||
class MeshNode : public SceneNode
|
||||
{
|
||||
GeometryNode geometry;
|
||||
public:
|
||||
// temp
|
||||
glm::mat4 m_movement;
|
||||
glm::mat4 m_acceleration;
|
||||
|
||||
MeshNode(Mesh* mesh) : geometry(mesh, glm::mat4()) {}
|
||||
|
||||
virtual void update()
|
||||
{
|
||||
m_movement = m_acceleration * m_movement;
|
||||
geometry.modelMatrix = m_movement * geometry.modelMatrix;
|
||||
}
|
||||
|
||||
void setTransform(const glm::mat4 &transform) { geometry.modelMatrix = transform; }
|
||||
const glm::mat4& getTransform() { return geometry.modelMatrix; }
|
||||
|
||||
GeometryNode* getGeometryNode() { return &geometry; }
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief The CameraNode class is a scene node that can be used by the renderer
|
||||
*/
|
||||
class CameraNode : public TrackBallCamera, SceneNode
|
||||
{
|
||||
public:
|
||||
CameraNode() {}
|
||||
};
|
||||
|
||||
class SceneTree : public Scene
|
||||
{
|
||||
public:
|
||||
SceneTree();
|
||||
~SceneTree();
|
||||
|
||||
virtual SceneIterator<Light*>* getLights();
|
||||
virtual SceneIterator<GeometryNode*>* getGeometry();
|
||||
|
||||
void update();
|
||||
|
||||
Texture* getSkybox() {return m_skybox;}
|
||||
void setSkybox(Texture* skybox) {m_skybox = skybox;}
|
||||
|
||||
void setMainCamera(CameraNode *camera);
|
||||
|
||||
ContainerNode* getRootObject(){return &m_root;}
|
||||
void addObject(ContainerNode *parent, SceneNode *node);
|
||||
void addToIndex(SceneNode* node);
|
||||
void removeObject(ContainerNode* parent,SceneNode *node);
|
||||
void removeFromIndex(SceneNode *node);
|
||||
private:
|
||||
ContainerNode m_root;
|
||||
std::vector<Light*> m_lights;
|
||||
std::vector<GeometryNode*> m_geometries;
|
||||
Texture* m_skybox;
|
||||
};
|
||||
|
||||
// Additionnal Nodes :
|
||||
|
||||
#endif // SCENETREE_H
|
@ -2,7 +2,9 @@
|
||||
|
||||
#include "message.h"
|
||||
#include "input.h"
|
||||
#include "scenetree.h"
|
||||
#include "scene/scenetree.h"
|
||||
#include "scene/meshnode.h"
|
||||
#include "scene/textnode.h"
|
||||
#include "mesh.h"
|
||||
#include "phongmaterial.h"
|
||||
#include "tools/utils.h"
|
||||
@ -42,31 +44,38 @@ void SparrowShell::out(std::string s)
|
||||
}
|
||||
|
||||
void SparrowShell::scrollUp(){
|
||||
if (m_index + BUFFER_DISPLAYED_NUMBER < m_buffer.size()) m_index++;
|
||||
// std::cout << "scroll up" << std::endl;
|
||||
if (m_index + BUFFER_DISPLAYED_NUMBER < m_buffer.size()){
|
||||
m_index++;
|
||||
m_indexMoved = true;
|
||||
}
|
||||
}
|
||||
|
||||
void SparrowShell::scrollDown(){
|
||||
if (m_index > 0) m_index--;
|
||||
// std::cout << "scroll down" << std::endl;
|
||||
if (m_index > 0){
|
||||
m_index--;
|
||||
m_indexMoved = true;
|
||||
}
|
||||
}
|
||||
|
||||
void SparrowShell::update()
|
||||
{
|
||||
//TODO : update TextMesh
|
||||
Font *shellfont = RESOURCE_GET(Font,"shellfont");
|
||||
MeshNode* mnode;
|
||||
TextNode* mnode;
|
||||
glm::vec2 text_pos(0);
|
||||
//std::vector<MeshNode*> textMeshes;
|
||||
for(auto textMesh: m_textMeshes)
|
||||
removeChild(textMesh);
|
||||
m_textMeshes.clear();
|
||||
for(unsigned int i = m_index;i<m_index+BUFFER_DISPLAYED_NUMBER;i++){
|
||||
mnode = new MeshNode(shellfont->getTextMesh(m_buffer[i],glm::vec3(0.7,1,0.3)));
|
||||
utils::setPosition2D(mnode,text_pos);
|
||||
text_pos.y += shellfont->getLineHeight();
|
||||
m_textMeshes.push_back(mnode);
|
||||
addChild(mnode);
|
||||
if(m_indexMoved){
|
||||
for(auto textMesh: m_textMeshes)
|
||||
m_currentScene->removeObject(this,textMesh);
|
||||
m_textMeshes.clear();
|
||||
for(unsigned int i = m_index;i<m_index+BUFFER_DISPLAYED_NUMBER;i++){
|
||||
mnode = shellfont->getTextNode(m_buffer[i],glm::vec3(0.7,1,0.3),12.f);
|
||||
utils::setPosition2D((TextNode*)mnode,text_pos);
|
||||
text_pos.y += shellfont->getLineHeight();
|
||||
mnode->setDepth(SHELL_DEPTH+1);
|
||||
m_textMeshes.push_back(mnode);
|
||||
m_currentScene->addObject(this,mnode);
|
||||
}
|
||||
m_indexMoved = false;
|
||||
}
|
||||
m_scrollbar.update();
|
||||
}
|
||||
@ -80,8 +89,6 @@ void SparrowShell::ShellBuffer::push(std::string s){
|
||||
m_buffer.push_back(s);
|
||||
}
|
||||
|
||||
//SparrowShell::ScrollBar::ScrollBar();
|
||||
|
||||
SparrowShell::ScrollBar::ScrollBar(SparrowShell* shell):m_shell(shell){
|
||||
m_position = glm::ivec2(m_shell->m_dimension.x - SparrowShell::SCROLLBAR_PIXEL_WIDTH,0);
|
||||
m_dimension = glm::ivec2(SparrowShell::SCROLLBAR_PIXEL_WIDTH,m_shell->m_dimension.y);
|
||||
@ -110,5 +117,6 @@ void SparrowShell::ScrollBar::update(){
|
||||
utils::resize2D(m_mesh,m_dimension,new_dim);
|
||||
m_shell->m_resizeScrollBar = false;
|
||||
}
|
||||
utils::setPosition2D(m_mesh,new_pos);
|
||||
if (m_shell->m_resizeScrollBar || m_shell->m_indexMoved)
|
||||
utils::setPosition2D(m_mesh,new_pos);
|
||||
}
|
||||
|
@ -4,10 +4,11 @@
|
||||
#include <list>
|
||||
|
||||
#include "system.h"
|
||||
#include "scenetree.h"
|
||||
#include "scene/scenetree.h"
|
||||
#include "glm/glm.hpp"
|
||||
|
||||
class Input;
|
||||
class MeshNode;
|
||||
|
||||
namespace sf {
|
||||
class Window;
|
||||
@ -16,9 +17,9 @@ class Window;
|
||||
class SparrowShell : public ContainerNode
|
||||
{
|
||||
private:
|
||||
class BackGround : public MeshNode {
|
||||
//class BackGround : public MeshNode {
|
||||
|
||||
};
|
||||
// };
|
||||
|
||||
class ScrollBar{
|
||||
SparrowShell* m_shell;
|
||||
@ -52,13 +53,15 @@ private:
|
||||
|
||||
sf::Window* m_window;
|
||||
Input* m_input;
|
||||
SceneTree* m_currentScene;
|
||||
|
||||
glm::ivec2 m_position;
|
||||
glm::ivec2 m_dimension;
|
||||
std::vector<MeshNode*> m_textMeshes;
|
||||
ShellBuffer m_buffer;
|
||||
int m_index = 0;
|
||||
bool m_resizeScrollBar = false;
|
||||
|
||||
bool m_indexMoved = false;
|
||||
//textMesh
|
||||
MeshNode* m_background;
|
||||
ScrollBar m_scrollbar;
|
||||
@ -67,6 +70,7 @@ public:
|
||||
SparrowShell(sf::Window*, Input*);
|
||||
|
||||
void update();
|
||||
void setScene(SceneTree *scene){m_currentScene = scene;}
|
||||
|
||||
void scrollUp();
|
||||
void scrollDown();
|
||||
|
@ -6,9 +6,10 @@
|
||||
#include <phongmaterial.h>
|
||||
#include <resourcemanager.h>
|
||||
#include <sparrowrenderer.h>
|
||||
#include <scenetree.h>
|
||||
#include <texture.h>
|
||||
|
||||
|
||||
#include <scene/scenetree.h>
|
||||
#include <tools/graph.h>
|
||||
#include <tools/pathfinder.h>
|
||||
#include <tools/loader.h>
|
||||
@ -52,7 +53,7 @@ int main(){
|
||||
Font* fonte_des_neiges = Loader::loadFont("../data/consolas.fnt","../data/consolas.png");
|
||||
RESOURCE_ADD(fonte_des_neiges,Font,"shellfont");
|
||||
|
||||
MeshNode* mnode/* = new MeshNode(fonte_des_neiges->getTextMesh("Hello World!"));
|
||||
TextNode* tnode/* = new MeshNode(fonte_des_neiges->getTextMesh("Hello World!"));
|
||||
scene.addObject(scene.getRootObject(),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)));
|
||||
@ -61,17 +62,17 @@ int main(){
|
||||
// utils::rotate2D(mnode, glm::vec2(10,10),0.5);
|
||||
// scene.addObject(scene.getRootObject(),mnode);
|
||||
|
||||
mnode = new MeshNode(fonte_des_neiges->getTextMesh("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));
|
||||
|
||||
utils::setPosition2D(mnode,glm::vec2(200, 170));
|
||||
utils::rotate2D(mnode, glm::vec2(0),-0.5);
|
||||
utils::setPosition2D((MeshNode*)tnode,glm::vec2(200, 170));
|
||||
utils::rotate2D((MeshNode*)tnode, glm::vec2(0),-0.5);
|
||||
|
||||
// mnode->setTransform(glm::rotate(glm::translate(glm::mat4(), glm::vec3(200, 170, 0)), -0.5f, glm::vec3(0, 0, 1)));
|
||||
scene.addObject(scene.getRootObject(),mnode);
|
||||
scene.addObject(scene.getRootObject(),(SceneNode*)tnode);
|
||||
|
||||
mnode = new MeshNode(fonte_des_neiges->getTextMesh("Such Text", glm::vec3(0.7, 0.4, 0.2)));
|
||||
mnode->setTransform(glm::rotate(glm::translate(glm::mat4(), glm::vec3(200, 170, 0)), -0.5f, glm::vec3(0, 0, 1)));
|
||||
scene.addObject(scene.getRootObject(),mnode);
|
||||
//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)));
|
||||
//scene.addObject(scene.getRootObject(),tnode);
|
||||
|
||||
|
||||
// mnode = new MeshNode(fonte_des_neiges->getTextMesh("Very font", glm::vec3(0.7, 0.2, 0.8)));
|
||||
|
@ -1,14 +1,16 @@
|
||||
#include "font.h"
|
||||
#include <phongmaterial.h>
|
||||
#include "mesh.h"
|
||||
#include "scene/textnode.h"
|
||||
|
||||
Font::Font()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Mesh* Font::getTextMesh(std::string s, glm::vec3 color)
|
||||
TextNode* Font::getTextNode(std::string s, glm::vec3 color, float font_size)
|
||||
{
|
||||
Mesh* text = new Mesh();
|
||||
Mesh* textmesh = new Mesh();
|
||||
glm::ivec2 current_pos;
|
||||
for(char c : s){
|
||||
if(c == '\n')
|
||||
@ -19,7 +21,7 @@ Mesh* Font::getTextMesh(std::string s, glm::vec3 color)
|
||||
else
|
||||
{
|
||||
CharInfo charInfo = m_charTable[c];
|
||||
text->addRectangle2D(current_pos + charInfo.offset,
|
||||
textmesh->addRectangle2D(current_pos + charInfo.offset,
|
||||
charInfo.dim,
|
||||
glm::vec2(charInfo.pos)/m_scale,
|
||||
glm::vec2(charInfo.dim)/m_scale);
|
||||
@ -30,7 +32,8 @@ Mesh* Font::getTextMesh(std::string s, glm::vec3 color)
|
||||
// TODO : delete this material somewhere (garbage collector ?)
|
||||
mat->setTexture(PhongMaterial::ALPHA_SLOT, m_tex, "font_texture");
|
||||
mat->diffuse = color;
|
||||
text->setMaterial((Material*)mat);
|
||||
text->initGL();
|
||||
textmesh->setMaterial((Material*)mat);
|
||||
textmesh->initGL();
|
||||
TextNode *text = new TextNode(textmesh,font_size);
|
||||
return text;
|
||||
}
|
||||
|
@ -3,9 +3,10 @@
|
||||
|
||||
#include <map>
|
||||
#include <glm/vec2.hpp>
|
||||
#include "mesh.h"
|
||||
#include <glm/vec3.hpp>
|
||||
|
||||
class Texture;
|
||||
class TextNode;
|
||||
|
||||
class Font
|
||||
{
|
||||
@ -30,7 +31,7 @@ public:
|
||||
void setScale(glm::vec2 scale){m_scale = scale;}
|
||||
void setTexture(Texture *tex){m_tex = tex;}
|
||||
|
||||
Mesh* getTextMesh(std::string s, glm::vec3 color = glm::vec3(1));
|
||||
TextNode* getTextNode(std::string s, glm::vec3 color = glm::vec3(1),float font_size = 0);
|
||||
private:
|
||||
std::string m_name;
|
||||
Texture *m_tex;
|
||||
|
@ -1,5 +1,7 @@
|
||||
#include "utils.h"
|
||||
#include "scenetree.h"
|
||||
#include "glm/ext.hpp"
|
||||
//#include "scene/scenetree.h"
|
||||
#include "scene/meshnode.h"
|
||||
|
||||
std::vector<std::string> utils::split(const std::string &line, char sep){
|
||||
std::vector<std::string> tokens;
|
||||
|
Loading…
x
Reference in New Issue
Block a user