diff options
| author | hachem <im@hachem.wtf> | 2025-08-15 03:18:29 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2025-08-15 03:18:29 +0200 |
| commit | a6655eebe2a69ee427264bd43df5747851ed96df (patch) | |
| tree | fa8c6ef862898a3d8e19250698dca0d9aaf4f9c2 /src/engine/scene.cpp | |
| parent | 3d8d3259e1cf5a7d88e5d1e530cc8c9bf9140734 (diff) | |
feat: complete first geodesic 3D raytracing
Diffstat (limited to 'src/engine/scene.cpp')
| -rw-r--r-- | src/engine/scene.cpp | 57 |
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); - } -} |
