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 99ffeae..355dbd1 100644 --- a/src/scene/Scene.cpp +++ b/src/scene/Scene.cpp @@ -1,9 +1,34 @@ #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) { - + worker = std::thread( + [&]() + { + 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 + }; + } + }); } - -void Scene::render() {} diff --git a/src/scene/Scene.h b/src/scene/Scene.h index e99dce6..9b517ec 100644 --- a/src/scene/Scene.h +++ b/src/scene/Scene.h @@ -1,15 +1,30 @@ #pragma once #include "BVH.h" #include "window/Window.h" +#include "util/Camera.h" +/// +/// Ray1 +/// Ray2 +/// Ray3 +/// Ray4 +/// Ray5 +/// GammaResolve +/// Ray1 +/// Ray2 +/// Ray3 +/// class Scene { public: Scene(); ~Scene(); - void render(); + void render(Camera cam, int width, int height, int numSamples); + constexpr const std::vector& getImage() const { return image; } 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