From 8cea3388417dcababb108165108f583fef31ff04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20=C5=A0toura=C4=8D?= <525032@mail.muni.cz> Date: Thu, 18 May 2023 17:56:09 +0200 Subject: [PATCH] grid in scene --- src/gfx/include/gfx/light.hpp | 2 +- src/gfx/include/gfx/node.hpp | 9 +++++---- src/gfx/include/gfx/object.hpp | 4 ++++ src/gfx/include/gfx/render.hpp | 5 ++--- src/gfx/src/render.cpp | 26 +++++++++++++------------ src/studio/include/studio/simulator.hpp | 12 ++++++------ src/studio/src/simulator.cpp | 20 ++++++++++++++----- 7 files changed, 47 insertions(+), 31 deletions(-) diff --git a/src/gfx/include/gfx/light.hpp b/src/gfx/include/gfx/light.hpp index 4696f2c..399abe5 100644 --- a/src/gfx/include/gfx/light.hpp +++ b/src/gfx/include/gfx/light.hpp @@ -18,7 +18,7 @@ protected: frame_weak_ptr frame; public: Light(glm::vec3 _color, frame_ptr _pos) : color{_color}, frame{_pos} {} - glm::vec3 getColor() { return color; } + glm::vec3 getColor() const { return color; } virtual glm::vec3 getPosition() const { diff --git a/src/gfx/include/gfx/node.hpp b/src/gfx/include/gfx/node.hpp index e012dfd..2df40f6 100644 --- a/src/gfx/include/gfx/node.hpp +++ b/src/gfx/include/gfx/node.hpp @@ -26,10 +26,11 @@ public: Node(frame_ptr _frame, parent_weak_ptr _parent = std::weak_ptr<Node>(), std::vector<node_ptr> _children = {}) : frame{_frame}, parent{_parent}, children{_children} {} - frame_ptr getFrame() { return frame; } - std::vector<node_ptr> &getChildren() { return children; } - parent_weak_ptr getParent() { return parent; } - std::vector<objectbase_ptr> &getObjects() { return objects; }; + frame_ptr getFrame() const { return frame; } + parent_weak_ptr getParent() const { return parent; } + const std::vector<node_ptr> &getChildren() const { return children; } + const std::vector<objectbase_ptr> &getObjects() const { return objects; } + void setFrame(frame_ptr _frame) { frame = _frame; } void addChild(Node child) { children.emplace_back(std::make_shared<Node>(child)); } diff --git a/src/gfx/include/gfx/object.hpp b/src/gfx/include/gfx/object.hpp index 5caac05..2c9c15b 100644 --- a/src/gfx/include/gfx/object.hpp +++ b/src/gfx/include/gfx/object.hpp @@ -19,6 +19,7 @@ class Object : public ObjectBase glm::vec3 color; std::string shader_type; + int draw_mode = GL_TRIANGLES; public: Object(std::vector<float> const &_vertices, @@ -47,6 +48,9 @@ public: glm::vec3 getColor() const { return color; } void setColor(glm::vec3 _color) { color = _color; } + + int getDrawMode() const { return draw_mode; } + void setDrawMode(int _draw_mode) { draw_mode = _draw_mode; } }; #endif \ No newline at end of file diff --git a/src/gfx/include/gfx/render.hpp b/src/gfx/include/gfx/render.hpp index ee5728d..b683f88 100644 --- a/src/gfx/include/gfx/render.hpp +++ b/src/gfx/include/gfx/render.hpp @@ -22,9 +22,8 @@ using light_ptr = std::shared_ptr<Light>; std::vector<float> generate_grid_vertices(int span); std::vector<unsigned int> generate_grid_indices(int span); void send_matrices_to_shader(Shader &myShader, glm::mat4 &model, glm::mat4 &view, glm::mat4 &projection); -void gfx_draw(std::map<std::string, shader_ptr> &myShaders, light_ptr light, +void gfx_draw(std::map<std::string, shader_ptr> &myShaders, std::vector<light_ptr> lights, std::vector<camera_ptr> &cameras, std::vector<frame_ptr> &cam_frames, int active_camera, - std::vector<node_ptr> &scene, - Object &grid, Frame &grid_frame); + std::vector<node_ptr> &scene); #endif \ No newline at end of file diff --git a/src/gfx/src/render.cpp b/src/gfx/src/render.cpp index 98da051..70d9a2e 100644 --- a/src/gfx/src/render.cpp +++ b/src/gfx/src/render.cpp @@ -69,9 +69,9 @@ void send_matrices_to_shader(Shader &myShader, glm::mat4 &model, glm::mat4 &view ASSUMPTION(glGetError() == GL_NO_ERROR); } -void draw_objects(std::map<std::string, shader_ptr> &myShaders, light_ptr light, +void draw_objects(std::map<std::string, shader_ptr> &myShaders, std::vector<light_ptr> lights, std::vector<frame_ptr> &cam_frames, int active_camera, - std::vector<node_ptr> &scene, + const std::vector<node_ptr> &scene, glm::mat4 &view, glm::mat4 &projection) { for (auto &node : scene) @@ -89,10 +89,12 @@ void draw_objects(std::map<std::string, shader_ptr> &myShaders, light_ptr light, if (shader_used == "lit") { // FTO DO: enum promennych z shaderu - myShaders[shader_used]->setVec3("lightColor", light->getColor()); - myShaders[shader_used]->setVec3("lightPos", light->getPosition()); + // Currently 1 light only + myShaders[shader_used]->setVec3("lightColor", lights[0]->getColor()); + myShaders[shader_used]->setVec3("lightPos", lights[0]->getPosition()); myShaders[shader_used]->setVec3("viewPos", cam_frames[active_camera]->getPosition()); } + // else if (shader_used == "basic") // TO DO: children maji relativni frame vuci parentum glm::mat4 model = node->getFrame()->getModelMat(); @@ -101,14 +103,14 @@ void draw_objects(std::map<std::string, shader_ptr> &myShaders, light_ptr light, obj->getVAO()->Bind(); - glDrawElements(GL_TRIANGLES, + glDrawElements(obj->getDrawMode(), static_cast<GLsizei>(obj->getIndices().size()), GL_UNSIGNED_INT, 0); ASSUMPTION(glGetError() == GL_NO_ERROR); } - draw_objects(myShaders, light, cam_frames, active_camera, node->getChildren(), view, projection); + draw_objects(myShaders, lights, cam_frames, active_camera, node->getChildren(), view, projection); } } @@ -129,7 +131,7 @@ void draw_grid(std::map<std::string, shader_ptr> &myShaders, Object &grid, Frame ASSUMPTION(glGetError() == GL_NO_ERROR); } -void find_lights(std::vector<node_ptr> &scene, std::vector<Node*> &lights) +void find_lights(const std::vector<node_ptr> &scene, std::vector<Node*> &lights) { for (auto &node : scene) { @@ -142,10 +144,9 @@ void find_lights(std::vector<node_ptr> &scene, std::vector<Node*> &lights) } } -void gfx_draw(std::map<std::string, shader_ptr> &myShaders, light_ptr light, +void gfx_draw(std::map<std::string, shader_ptr> &myShaders, std::vector<light_ptr> lights, std::vector<camera_ptr> &cameras, std::vector<frame_ptr> &cam_frames, int active_camera, - std::vector<node_ptr> &scene, - Object &grid, Frame &grid_frame) + std::vector<node_ptr> &scene) { glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); @@ -187,8 +188,9 @@ void gfx_draw(std::map<std::string, shader_ptr> &myShaders, light_ptr light, // find_lights(scene, lights); /* DRAW OBJECTS */ - draw_objects(myShaders, light, cam_frames, active_camera, scene, view, projection); + draw_objects(myShaders, lights, cam_frames, active_camera, scene, view, projection); /* DRAW GRID */ - draw_grid(myShaders, grid, grid_frame, view, projection); + //find_grid(); + // draw_grid(myShaders, grid, grid_frame, view, projection); } diff --git a/src/studio/include/studio/simulator.hpp b/src/studio/include/studio/simulator.hpp index 00a761f..78a2b76 100644 --- a/src/studio/include/studio/simulator.hpp +++ b/src/studio/include/studio/simulator.hpp @@ -46,8 +46,8 @@ struct Simulator : public osi::Simulator void update() override; void present() override; void showUI(); - void find_lights(std::vector<node_ptr> &scene); - void find_cameras(std::vector<node_ptr> &scene); + void find_lights(const std::vector<node_ptr> &scene); + void find_cameras(const std::vector<node_ptr> &scene); void create_scene(); void process_input(); void process_mouse(); @@ -74,10 +74,10 @@ struct Simulator : public osi::Simulator std::vector<camera_ptr> cameras; // find cameras, lights zde vektory - Object grid = Object(generate_grid_vertices(100), generate_grid_indices(100), {0, -1, 0}, - glm::vec3(0.5f, 0.5f, 0.5f), "basic"); - Frame grid_frame = Frame({0, 0, 0}); - light_ptr light; + // Object grid = Object(generate_grid_vertices(100), generate_grid_indices(100), {0, -1, 0}, + // glm::vec3(0.5f, 0.5f, 0.5f), "basic"); + // Frame grid_frame = Frame({0, 0, 0}); + // light_ptr light; std::map<std::string, shader_ptr> myShaders; }; diff --git a/src/studio/src/simulator.cpp b/src/studio/src/simulator.cpp index ccfb6f4..7ac19a9 100644 --- a/src/studio/src/simulator.cpp +++ b/src/studio/src/simulator.cpp @@ -170,7 +170,7 @@ void Simulator::present() cameras[active_camera]->setWindowSize(window().size()); } - gfx_draw(myShaders, lights[0], cameras, cam_frames, active_camera, scene, grid, grid_frame); + gfx_draw(myShaders, lights, cameras, cam_frames, active_camera, scene); } void Simulator::showUI() @@ -192,7 +192,7 @@ void Simulator::showUI() ImGui::End(); } -void Simulator::find_lights(std::vector<node_ptr> &scene) +void Simulator::find_lights(const std::vector<node_ptr> &scene) { for (auto &node : scene) { @@ -206,7 +206,7 @@ void Simulator::find_lights(std::vector<node_ptr> &scene) } } -void Simulator::find_cameras(std::vector<node_ptr> &scene) +void Simulator::find_cameras(const std::vector<node_ptr> &scene) { for (auto &node : scene) { @@ -227,8 +227,18 @@ void Simulator::create_scene() scene.emplace_back(std::make_shared<Node>(obj_frames[i])); scene[i]->addObject(objects[i]); } - // scene.emplace_back(std::make_shared<Node>(grid_frame)); - // scene.back()->addObject(grid); + + /* ADD GRID */ + scene.emplace_back(std::make_shared<Node>(std::make_shared<Frame>(glm::vec3(0, 0, 0)))); + object_ptr grid = std::make_shared<Object>(generate_grid_vertices(100), + generate_grid_indices(100), + std::vector<float>{0, -1, 0}, + glm::vec3(0.5f, 0.5f, 0.5f), + "basic"); + grid->setDrawMode(GL_LINES); + scene.back()->addObject(std::move(grid)); + + /* ADD LIGHT */ scene.emplace_back(std::make_shared<Node>(obj_frames[1])); scene.back()->addObject(std::make_shared<Light>(glm::vec3(1.0f, 1.0f, 1.0f), scene.back()->getFrame())); } -- GitLab