hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/src/engine/scene.cpp
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2025-08-15 03:18:29 +0200
committerhachem <im@hachem.wtf>2025-08-15 03:18:29 +0200
commita6655eebe2a69ee427264bd43df5747851ed96df (patch)
treefa8c6ef862898a3d8e19250698dca0d9aaf4f9c2 /src/engine/scene.cpp
parent3d8d3259e1cf5a7d88e5d1e530cc8c9bf9140734 (diff)
feat: complete first geodesic 3D raytracing
Diffstat (limited to 'src/engine/scene.cpp')
-rw-r--r--src/engine/scene.cpp57
1 files changed, 0 insertions, 57 deletions
diff --git a/src/engine/scene.cpp b/src/engine/scene.cpp
deleted file mode 100644
index bfac1aa..0000000
--- a/src/engine/scene.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-#include "scene.h"
-
-namespace Donut
-{
- Scene::Scene()
- : m_light_pos(5.0f, 5.0f, 5.0f) { }
-
- glm::vec3 Scene::trace(Ray &ray)
- {
- float closest = std::numeric_limits<float>::infinity();
- const Object* hit_obj = nullptr;
-
- for(auto& obj : objs)
- {
- float t;
-
- if(obj.intersect(ray, t))
- if(t < closest)
- {
- closest = t;
- hit_obj = &obj;
- }
- }
-
- if(hit_obj)
- {
- glm::vec3 hit_point = ray.m_origin + ray.m_direction * closest;
- glm::vec3 normal = hit_obj->get_normal(hit_point);
- glm::vec3 light_dir = glm::normalize(m_light_pos - hit_point);
-
- float diff = std::max(glm::dot(normal, light_dir), 0.0f);
-
- Ray shadow_ray(hit_point + normal * 0.001f, light_dir);
- bool in_shadow = false;
-
- for(auto& obj : objs)
- {
- float t;
-
- if(obj.intersect(shadow_ray, t))
- {
- in_shadow = true;
- break;
- }
- }
-
- glm::vec3 color = hit_obj->m_material.m_color;
- float ambient = 0.1f;
-
- if (in_shadow)
- return color * ambient;
- return color * (ambient + diff * 0.9f);
- }
-
- return glm::vec3(0.0f, 0.0f, 0.1f);
- }
-}