diff --git a/Makefile b/Makefile index 9d73d4b..ea3ad1c 100644 --- a/Makefile +++ b/Makefile @@ -55,6 +55,7 @@ ALL_SRCS := $(IMGUI_SRCS) \ class/SceneParser.cpp \ class/ObjParser.cpp \ class/BVH.cpp \ + class/Renderer.cpp \ SRCS := $(ALL_SRCS:%=$(SRCS_DIR)/%) OBJS := $(addprefix $(OBJS_DIR)/, $(SRCS:%.cpp=%.o)) diff --git a/imgui.ini b/imgui.ini index e0f3220..f2af59a 100644 --- a/imgui.ini +++ b/imgui.ini @@ -3,17 +3,15 @@ Pos=60,60 Size=400,400 [Window][Camera] -Pos=1643,7 +Pos=399,48 Size=259,200 -Collapsed=1 [Window][Material] -Pos=1642,29 +Pos=646,129 Size=266,299 -Collapsed=1 [Window][Fog settings] -Pos=1641,52 +Pos=927,52 Size=247,130 Collapsed=1 @@ -22,7 +20,11 @@ Pos=1642,668 Size=260,143 [Window][Debug BVH] -Pos=1641,72 +Pos=927,72 Size=274,205 Collapsed=1 +[Window][Renderer] +Pos=636,712 +Size=307,319 + diff --git a/includes/RT.hpp b/includes/RT.hpp index bfde952..b9a2dfa 100644 --- a/includes/RT.hpp +++ b/includes/RT.hpp @@ -6,7 +6,7 @@ /* By: ycontre +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/09/27 14:52:10 by TheRed #+# #+# */ -/* Updated: 2025/01/16 15:02:34 by tomoron ### ########.fr */ +/* Updated: 2025/01/22 16:37:32 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -57,6 +57,7 @@ struct Vertex { # include "objects/Cylinder.hpp" # include "Camera.hpp" +# include "Renderer.hpp" # include "Window.hpp" # include "Shader.hpp" # include "Scene.hpp" diff --git a/includes/RT/Renderer.hpp b/includes/RT/Renderer.hpp new file mode 100644 index 0000000..c5b887d --- /dev/null +++ b/includes/RT/Renderer.hpp @@ -0,0 +1,45 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Renderer.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/01/22 16:29:26 by tomoron #+# #+# */ +/* Updated: 2025/01/22 19:34:22 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef RENDERER_HPP +# define RENDERER_HPP + +# include "RT.hpp" + +class Scene; +class Window; + +typedef struct s_pathPoint +{ + glm::vec3 pos; + glm::vec2 dir; + float time; +} t_pathPoint; + +class Renderer +{ + public: + Renderer(Scene *scene, Window *win); + void renderImgui(void); + + private: + void addPoint(void); + + int _min; + float _sec; + int _samples; + std::vector _path; + Scene *_scene; + Window *_win; +}; + +#endif diff --git a/includes/RT/Window.hpp b/includes/RT/Window.hpp index 803f58f..8b39b36 100644 --- a/includes/RT/Window.hpp +++ b/includes/RT/Window.hpp @@ -6,7 +6,7 @@ /* By: ycontre +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/13 16:15:41 by TheRed #+# #+# */ -/* Updated: 2025/01/11 16:14:11 by tomoron ### ########.fr */ +/* Updated: 2025/01/23 00:39:11 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -26,7 +26,7 @@ class Window void display(); void pollEvents(); bool shouldClose(); - + void process_input(); static void keyCallback(GLFWwindow *window, int key, int scancode, int action, int mods); @@ -44,9 +44,12 @@ class Window bool &getAccumulate(void); + void setFrameCount(int nb); + private: GLFWwindow *_window; Scene *_scene; + Renderer *_renderer; float _fps; float _delta; diff --git a/scenes/test.rt b/scenes/test.rt index 62a746e..dc9608d 100644 --- a/scenes/test.rt +++ b/scenes/test.rt @@ -15,123 +15,15 @@ MAT 255 255 255 5.0 0.0 0.0 // white light 7 MAT 255 255 255 0.0 0.0 0.0 TRN // glass 8 pl 0 0 0 0 1 0 2 // floor -pl 0 5 0 0 -1 0 5 - -qu 3 4.9 3 3 0 0 0 0 3 7 - -qu -2.5 0 -2.5 0 5 0 0 0 15 1 -qu -2.5 0 -2.5 0 5 0 15 0 0 3 -qu 11.5 0 -2.5 0 5 0 0 0 15 1 -qu -2.5 0 11.5 0 5 0 15 0 0 4 +#pl 0 5 0 0 -1 0 5 +# +#qu 3 4.9 3 3 0 0 0 0 3 7 +# +#qu -2.5 0 -2.5 0 5 0 0 0 15 1 +#qu -2.5 0 -2.5 0 5 0 15 0 0 3 +#qu 11.5 0 -2.5 0 5 0 0 0 15 1 +#qu -2.5 0 11.5 0 5 0 15 0 0 4 OBJ obj/Dragon_8K.obj 0 0.38 0 1 -OBJ obj/Dragon_8K.obj 0 0.38 1 1 -OBJ obj/Dragon_8K.obj 0 0.38 2 1 -OBJ obj/Dragon_8K.obj 0 0.38 3 1 -OBJ obj/Dragon_8K.obj 0 0.38 4 1 -OBJ obj/Dragon_8K.obj 0 0.38 5 1 -OBJ obj/Dragon_8K.obj 0 0.38 6 1 -OBJ obj/Dragon_8K.obj 0 0.38 7 1 -OBJ obj/Dragon_8K.obj 0 0.38 8 1 -OBJ obj/Dragon_8K.obj 0 0.38 9 1 - -OBJ obj/Dragon_8K.obj 1 0.38 0 1 -OBJ obj/Dragon_8K.obj 1 0.38 1 1 -OBJ obj/Dragon_8K.obj 1 0.38 2 1 -OBJ obj/Dragon_8K.obj 1 0.38 3 1 -OBJ obj/Dragon_8K.obj 1 0.38 4 1 -OBJ obj/Dragon_8K.obj 1 0.38 5 1 -OBJ obj/Dragon_8K.obj 1 0.38 6 1 -OBJ obj/Dragon_8K.obj 1 0.38 7 1 -OBJ obj/Dragon_8K.obj 1 0.38 8 1 -OBJ obj/Dragon_8K.obj 1 0.38 9 1 - -OBJ obj/Dragon_8K.obj 2 0.38 0 1 -OBJ obj/Dragon_8K.obj 2 0.38 1 1 -OBJ obj/Dragon_8K.obj 2 0.38 2 1 -OBJ obj/Dragon_8K.obj 2 0.38 3 1 -OBJ obj/Dragon_8K.obj 2 0.38 4 1 -OBJ obj/Dragon_8K.obj 2 0.38 5 1 -OBJ obj/Dragon_8K.obj 2 0.38 6 1 -OBJ obj/Dragon_8K.obj 2 0.38 7 1 -OBJ obj/Dragon_8K.obj 2 0.38 8 1 -OBJ obj/Dragon_8K.obj 2 0.38 9 1 - -OBJ obj/Dragon_8K.obj 3 0.38 0 1 -OBJ obj/Dragon_8K.obj 3 0.38 1 1 -OBJ obj/Dragon_8K.obj 3 0.38 2 1 -OBJ obj/Dragon_8K.obj 3 0.38 3 1 -OBJ obj/Dragon_8K.obj 3 0.38 4 1 -OBJ obj/Dragon_8K.obj 3 0.38 5 1 -OBJ obj/Dragon_8K.obj 3 0.38 6 1 -OBJ obj/Dragon_8K.obj 3 0.38 7 1 -OBJ obj/Dragon_8K.obj 3 0.38 8 1 -OBJ obj/Dragon_8K.obj 3 0.38 9 1 - -OBJ obj/Dragon_8K.obj 4 0.38 0 1 -OBJ obj/Dragon_8K.obj 4 0.38 1 1 -OBJ obj/Dragon_8K.obj 4 0.38 2 1 -OBJ obj/Dragon_8K.obj 4 0.38 3 1 -OBJ obj/Dragon_8K.obj 4 0.38 4 1 -OBJ obj/Dragon_8K.obj 4 0.38 5 1 -OBJ obj/Dragon_8K.obj 4 0.38 6 1 -OBJ obj/Dragon_8K.obj 4 0.38 7 1 -OBJ obj/Dragon_8K.obj 4 0.38 8 1 -OBJ obj/Dragon_8K.obj 4 0.38 9 1 - -OBJ obj/Dragon_8K.obj 5 0.38 0 1 -OBJ obj/Dragon_8K.obj 5 0.38 1 1 -OBJ obj/Dragon_8K.obj 5 0.38 2 1 -OBJ obj/Dragon_8K.obj 5 0.38 3 1 -OBJ obj/Dragon_8K.obj 5 0.38 4 1 -OBJ obj/Dragon_8K.obj 5 0.38 5 1 -OBJ obj/Dragon_8K.obj 5 0.38 6 1 -OBJ obj/Dragon_8K.obj 5 0.38 7 1 -OBJ obj/Dragon_8K.obj 5 0.38 8 1 -OBJ obj/Dragon_8K.obj 5 0.38 9 1 - -OBJ obj/Dragon_8K.obj 6 0.38 0 1 -OBJ obj/Dragon_8K.obj 6 0.38 1 1 -OBJ obj/Dragon_8K.obj 6 0.38 2 1 -OBJ obj/Dragon_8K.obj 6 0.38 3 1 -OBJ obj/Dragon_8K.obj 6 0.38 4 1 -OBJ obj/Dragon_8K.obj 6 0.38 5 1 -OBJ obj/Dragon_8K.obj 6 0.38 6 1 -OBJ obj/Dragon_8K.obj 6 0.38 7 1 -OBJ obj/Dragon_8K.obj 6 0.38 8 1 -OBJ obj/Dragon_8K.obj 6 0.38 9 1 - -OBJ obj/Dragon_8K.obj 7 0.38 0 1 -OBJ obj/Dragon_8K.obj 7 0.38 1 1 -OBJ obj/Dragon_8K.obj 7 0.38 2 1 -OBJ obj/Dragon_8K.obj 7 0.38 3 1 -OBJ obj/Dragon_8K.obj 7 0.38 4 1 -OBJ obj/Dragon_8K.obj 7 0.38 5 1 -OBJ obj/Dragon_8K.obj 7 0.38 6 1 -OBJ obj/Dragon_8K.obj 7 0.38 7 1 -OBJ obj/Dragon_8K.obj 7 0.38 8 1 -OBJ obj/Dragon_8K.obj 7 0.38 9 1 - -OBJ obj/Dragon_8K.obj 8 0.38 0 1 -OBJ obj/Dragon_8K.obj 8 0.38 1 1 -OBJ obj/Dragon_8K.obj 8 0.38 2 1 -OBJ obj/Dragon_8K.obj 8 0.38 3 1 -OBJ obj/Dragon_8K.obj 8 0.38 4 1 -OBJ obj/Dragon_8K.obj 8 0.38 5 1 -OBJ obj/Dragon_8K.obj 8 0.38 6 1 -OBJ obj/Dragon_8K.obj 8 0.38 7 1 -OBJ obj/Dragon_8K.obj 8 0.38 8 1 -OBJ obj/Dragon_8K.obj 8 0.38 9 1 - -OBJ obj/Dragon_8K.obj 9 0.38 0 1 -OBJ obj/Dragon_8K.obj 9 0.38 1 1 -OBJ obj/Dragon_8K.obj 9 0.38 2 1 -OBJ obj/Dragon_8K.obj 9 0.38 3 1 -OBJ obj/Dragon_8K.obj 9 0.38 4 1 -OBJ obj/Dragon_8K.obj 9 0.38 5 1 -OBJ obj/Dragon_8K.obj 9 0.38 6 1 -OBJ obj/Dragon_8K.obj 9 0.38 7 1 -OBJ obj/Dragon_8K.obj 9 0.38 8 1 -OBJ obj/Dragon_8K.obj 9 0.38 9 1 diff --git a/srcs/RT.cpp b/srcs/RT.cpp index 492a9d2..2d57f86 100644 --- a/srcs/RT.cpp +++ b/srcs/RT.cpp @@ -6,7 +6,7 @@ /* By: ycontre +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/09/27 14:51:49 by TheRed #+# #+# */ -/* Updated: 2025/01/20 18:55:25 by ycontre ### ########.fr */ +/* Updated: 2025/01/22 16:33:56 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/srcs/class/Camera.cpp b/srcs/class/Camera.cpp index 065955e..d2604be 100644 --- a/srcs/class/Camera.cpp +++ b/srcs/class/Camera.cpp @@ -6,7 +6,7 @@ /* By: ycontre +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/15 14:00:38 by TheRed #+# #+# */ -/* Updated: 2025/01/15 19:32:41 by ycontre ### ########.fr */ +/* Updated: 2025/01/22 19:27:03 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -166,4 +166,4 @@ void Camera::setBounce(int bounce) void Camera::setFov(float fov) { _fov = fov; -} \ No newline at end of file +} diff --git a/srcs/class/Renderer.cpp b/srcs/class/Renderer.cpp new file mode 100644 index 0000000..c851375 --- /dev/null +++ b/srcs/class/Renderer.cpp @@ -0,0 +1,84 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Renderer.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/01/22 16:34:53 by tomoron #+# #+# */ +/* Updated: 2025/01/23 00:54:01 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "RT.hpp" + +Renderer::Renderer(Scene *scene, Window *win) +{ + _scene = scene; + _win = win; + _min = 0; + _sec = 0; + _samples = 1; +} + +void Renderer::addPoint(void) +{ + t_pathPoint newPoint; + Camera *cam; + std::vector::iterator pos; + + cam = _scene->getCamera(); + newPoint.pos = cam->getPosition(); + newPoint.dir = cam->getDirection(); + newPoint.time = _min + (_sec / 60); + std::cout << "position : " << glm::to_string(newPoint.pos) << std::endl; + std::cout << "direction : " << glm::to_string(newPoint.dir) << std::endl; + std::cout << "time : " << newPoint.time << std::endl; + pos = _path.begin(); + while(pos != _path.end() && pos->time <= newPoint.time) + pos++; + _path.insert(pos, newPoint); +} + +void Renderer::renderImgui(void) +{ + ImGui::Begin("Renderer"); + + ImGui::SliderInt("spi", &_samples, 1, 1000); + ImGui::Separator(); + + ImGui::SliderInt("minutes", &_min, 0, 2); + ImGui::SliderFloat("seconds", &_sec, 0, 60); + if(ImGui::Button("add step")) + addPoint(); + ImGui::Separator(); + + for(unsigned long i = 0; i < _path.size(); i++) + { + ImGui::Text("pos : %f, %f, %f",_path[i].pos.x, _path[i].pos.y, _path[i].pos.z); + ImGui::Text("dir : %f, %f",_path[i].dir.x, _path[i].dir.y); + ImGui::Text("time : %dm%ds", (int)_path[i].time, (int)(((_path[i].time - (int)_path[i].time)) * 60)); + + if(ImGui::Button(("delete##" + std::to_string(i)).c_str())) + { + _path.erase(_path.begin() + i); + } + + ImGui::SameLine(); + if(ImGui::Button(("go to pos##" + std::to_string(i)).c_str())) + { + _scene->getCamera()->setPosition(_path[i].pos); + _scene->getCamera()->setDirection(_path[i].dir.x, _path[i].dir.y); + _scene->getCamera()->updateCameraVectors(); + _win->setFrameCount(-1); + } + ImGui::SameLine(); + if(ImGui::Button(("edit pos##" + std::to_string(i)).c_str())) + { + _path[i].pos = _scene->getCamera()->getPosition(); + _path[i].dir = _scene->getCamera()->getDirection(); + } + ImGui::Separator(); + } + ImGui::End(); +} diff --git a/srcs/class/Window.cpp b/srcs/class/Window.cpp index 5acc4cc..75774d2 100644 --- a/srcs/class/Window.cpp +++ b/srcs/class/Window.cpp @@ -6,7 +6,7 @@ /* By: ycontre +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/13 16:16:24 by TheRed #+# #+# */ -/* Updated: 2025/01/18 19:24:04 by ycontre ### ########.fr */ +/* Updated: 2025/01/23 00:39:21 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,6 +17,7 @@ Window::Window(Scene *scene, int width, int height, const char *title, int sleep _scene = scene; _frameCount = 0; _pixelisation = 0; + _renderer = new Renderer(scene, this); if (!glfwInit()) { @@ -258,9 +259,12 @@ void Window::imGuiRender() ImGui::End(); + _renderer->renderImgui();; + ImGui::Render(); ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); + if (has_changed) _frameCount = (accumulate == 0) - 1; } @@ -280,6 +284,11 @@ int Window::getFrameCount(void) const return (_frameCount); } +void Window::setFrameCount(int nb) +{ + _frameCount = nb; +} + bool &Window::getAccumulate(void) { return (accumulate);