From a3a2dff86947334a3427fce6d6ccfc73143a131f Mon Sep 17 00:00:00 2001 From: Dynamitos Date: Fri, 24 Jan 2025 21:01:01 +0100 Subject: [PATCH 1/2] adding camera params --- src/scene/Scene.cpp | 23 ++++++++++++++++++----- src/scene/Scene.h | 7 +++++-- src/util/CMakeLists.txt | 1 + src/util/Camera.h | 11 +++++++++++ 4 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 src/util/Camera.h diff --git a/src/scene/Scene.cpp b/src/scene/Scene.cpp index 99ffeae..e6607ef 100644 --- a/src/scene/Scene.cpp +++ b/src/scene/Scene.cpp @@ -1,9 +1,22 @@ #include "Scene.h" -Scene::Scene() - : window(1920, 1080) +Scene::Scene(glm::vec3 cameraPos, glm::vec3 cameraDirection) : cameraPos(cameraPos), cameraDirection(cameraDirection) {} + +Scene::~Scene() {} + +void Scene::render(int width, int height, int numSamples) { - + image.clear(); + accumulator.clear(); + image.resize(width * height * 3); + accumulator.resize(width * height * 3); + for (int samp = 0; samp < numSamples; ++samp) + { + for (int w = 0; w < width; ++w) + { + for (int h = 0; h < height; ++h) + { + } + } + } } - -void Scene::render() {} diff --git a/src/scene/Scene.h b/src/scene/Scene.h index e99dce6..d6142fe 100644 --- a/src/scene/Scene.h +++ b/src/scene/Scene.h @@ -1,15 +1,18 @@ #pragma once #include "BVH.h" #include "window/Window.h" +#include "util/Camera.h" class Scene { public: Scene(); ~Scene(); - void render(); + void render(Camera cam, int width, int height, int numSamples); private: - Window window; + // the thing being displayed std::vector image; + // radiance accumulator + std::vector accumulator; BVH bvh; }; \ No newline at end of file diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt index 4d96c4f..e154cb1 100644 --- a/src/util/CMakeLists.txt +++ b/src/util/CMakeLists.txt @@ -1,5 +1,6 @@ target_sources(RayTracer PRIVATE + Camera.h Model.h Model.cpp ModelLoader.h diff --git a/src/util/Camera.h b/src/util/Camera.h new file mode 100644 index 0000000..9115398 --- /dev/null +++ b/src/util/Camera.h @@ -0,0 +1,11 @@ +#pragma once +#include + +struct Camera +{ + glm::vec3 position; + glm::vec3 direction; + glm::vec2 sensorSize = glm::vec2(0.036, 0.024); + float S_O = 6.9; + float f = 0.7; +}; \ No newline at end of file From ff9ebb916f6a500deb8448bbfc1eb12d5bdeaba1 Mon Sep 17 00:00:00 2001 From: Dynamitos Date: Fri, 24 Jan 2025 21:20:06 +0100 Subject: [PATCH 2/2] rough outline --- src/main.cpp | 23 ++++++++--------------- src/scene/Scene.cpp | 32 ++++++++++++++++++++++---------- src/scene/Scene.h | 12 ++++++++++++ 3 files changed, 42 insertions(+), 25 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 78051bf..5a219d4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,23 +4,16 @@ int main() { - BVH bvh; - bvh.addModels(ModelLoader::loadModel("../cube.fbx"), glm::mat4()); - bvh.generate(); - Window w(1920, 1080); - std::vector texture(1920 * 1080 * 3); - for (int j = 100; j < 200; ++j) - { - for (int i = 0; i < 1920; ++i) - { - texture[(j * 1920 + i) * 3] = 0xff; - texture[(j * 1920 + i) * 3 + 1] = 0xff; - texture[(j * 1920 + i) * 3 + 2] = 0x0; - } - } + Scene scene; + Window window; while (true) { - w.update(texture); + // IMGUI.... + if (Imgui.Button()) + { + scene.render(); + } + window.update(scene.getImage()); } return 0; } \ No newline at end of file diff --git a/src/scene/Scene.cpp b/src/scene/Scene.cpp index e6607ef..355dbd1 100644 --- a/src/scene/Scene.cpp +++ b/src/scene/Scene.cpp @@ -6,17 +6,29 @@ Scene::~Scene() {} void Scene::render(int width, int height, int numSamples) { - image.clear(); - accumulator.clear(); - image.resize(width * height * 3); - accumulator.resize(width * height * 3); - for (int samp = 0; samp < numSamples; ++samp) - { - for (int w = 0; w < width; ++w) + worker = std::thread( + [&]() { - for (int h = 0; h < height; ++h) + image.clear(); + accumulator.clear(); + image.resize(width * height * 3); + for (int samp = 0; samp < numSamples; ++samp) { + std::function job = [&]() + { + std::vector localAccumulator(width * height * 3); + for (int w = 0; w < width; ++w) + { + for (int h = 0; h < height; ++h) + { + if (cancel) + return; + bvh.traceRay(); + } + } + // lock image + // add result to image + }; } - } - } + }); } diff --git a/src/scene/Scene.h b/src/scene/Scene.h index d6142fe..9b517ec 100644 --- a/src/scene/Scene.h +++ b/src/scene/Scene.h @@ -3,12 +3,24 @@ #include "window/Window.h" #include "util/Camera.h" +/// +/// Ray1 +/// Ray2 +/// Ray3 +/// Ray4 +/// Ray5 +/// GammaResolve +/// Ray1 +/// Ray2 +/// Ray3 +/// class Scene { public: Scene(); ~Scene(); void render(Camera cam, int width, int height, int numSamples); + constexpr const std::vector& getImage() const { return image; } private: // the thing being displayed std::vector image;