From 641b62ca01da47680e0dc6baa4e666383348670b Mon Sep 17 00:00:00 2001 From: vonhyou Date: Thu, 14 Mar 2024 19:15:16 -0400 Subject: [PATCH] add ambient intensity --- src/Light.cc | 5 ++++- src/RayTracer.cc | 4 +++- src/Scene.cc | 4 ++++ src/Scene.h | 2 ++ 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Light.cc b/src/Light.cc index 5a0de3f..a23cd0c 100644 --- a/src/Light.cc +++ b/src/Light.cc @@ -1,4 +1,6 @@ #include "Light.h" +#include "Scene.h" + #include #include @@ -30,7 +32,8 @@ Vector3f PointLight::illumination(const HitRecord &hit, g->type() == Geometry::Type::SPHERE) return Vector3f::Zero(); - Vector3f ambient_ = geometry->ka() * geometry->ca(); + Vector3f ambient_ = + geometry->ka() * geometry->ca().array() * Scene::current->ai().array(); Vector3f diffuse_ = geometry->kd() * geometry->cd().array() * id_.array() * std::max(0.0f, hit.normal().dot(rayDirection)); diff --git a/src/RayTracer.cc b/src/RayTracer.cc index ac58ef7..1f9c8e0 100644 --- a/src/RayTracer.cc +++ b/src/RayTracer.cc @@ -85,8 +85,10 @@ void RayTracer::output() { void RayTracer::run() { parse(); - for (auto scene : scenes) + for (auto scene : scenes) { + Scene::current = scene; render(scene); + } output(); } diff --git a/src/Scene.cc b/src/Scene.cc index fcc395f..f9d9840 100644 --- a/src/Scene.cc +++ b/src/Scene.cc @@ -1,5 +1,7 @@ #include "Scene.h" +Scene *Scene::current = nullptr; + string Scene::name() const { return name_; } int Scene::width() { return width_; } @@ -8,6 +10,8 @@ int Scene::height() { return height_; } float Scene::fov() { return fov_; } +Vector3f Scene::ai() const { return ai_; } + Vector3f Scene::center() const { return center_; } Vector3f Scene::up() const { return up_; } diff --git a/src/Scene.h b/src/Scene.h index 0eecdce..6775ac2 100644 --- a/src/Scene.h +++ b/src/Scene.h @@ -36,6 +36,7 @@ public: int width(); int height(); float fov(); + Vector3f ai() const; Vector3f center() const; Vector3f up() const; Vector3f lookAt() const; @@ -44,6 +45,7 @@ public: void setAntialiasing(bool); void setTwoSideRender(bool); void setGlobalIllum(bool); + static Scene *current; }; #endif // !SCENE_H_