Ambientlight implemented
This commit is contained in:
parent
e032f1fa03
commit
7be006ff05
4 changed files with 56 additions and 1 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -11,6 +11,7 @@ build/
|
|||
!/data/parallax
|
||||
!/data/fractal.obj
|
||||
/result*
|
||||
/cmake-build-debug
|
||||
|
||||
# Latex stuff
|
||||
*.aux
|
||||
|
|
|
@ -25,7 +25,7 @@ file(GLOB shader_src "shader/*.cpp")
|
|||
|
||||
# The tracey library
|
||||
add_library(tracey STATIC ${common_src} ${camera_src} ${light_src}
|
||||
${primitive_src} ${renderer_src} ${scene_src} ${shader_src})
|
||||
${primitive_src} ${renderer_src} ${scene_src} ${shader_src} light/ambientlight.cpp light/ambientlight.h)
|
||||
if(NOT WIN32)
|
||||
target_link_libraries(tracey ${CMAKE_THREAD_LIBS_INIT} ${X11_LIBRARIES})
|
||||
endif()
|
||||
|
|
32
light/ambientlight.cpp
Normal file
32
light/ambientlight.cpp
Normal file
|
@ -0,0 +1,32 @@
|
|||
//
|
||||
// Created by marcel on 21.11.22.
|
||||
//
|
||||
|
||||
#include "light/ambientlight.h"
|
||||
#include "scene/scene.h"
|
||||
|
||||
AmbientLight::AmbientLight(float intensity, const Color &color) : Light(intensity, color) {}
|
||||
|
||||
Light::Illumination AmbientLight::illuminate(Scene const &scene, Ray const &ray) const {
|
||||
Vector3d const target = ray.origin + (ray.length - LGT_EPS) * ray.direction;
|
||||
|
||||
Illumination illum;
|
||||
illum.direction = -ray.normal;
|
||||
|
||||
// Precompute the distance from the light source
|
||||
float const distance = length(ray.normal);
|
||||
|
||||
|
||||
// Define a secondary ray from the surface point to the light source.
|
||||
Ray lightRay;
|
||||
lightRay.origin = target;
|
||||
lightRay.direction = -illum.direction;
|
||||
lightRay.length = distance - LGT_EPS;
|
||||
|
||||
// If the target is not in shadow...
|
||||
if (!scene.findOcclusion(lightRay))
|
||||
// ... compute the attenuation and light color
|
||||
illum.color = 1.0f / (distance * distance) * this->color * this->intensity;
|
||||
return illum;
|
||||
return illum;
|
||||
}
|
22
light/ambientlight.h
Normal file
22
light/ambientlight.h
Normal file
|
@ -0,0 +1,22 @@
|
|||
//
|
||||
// Created by marcel on 21.11.22.
|
||||
//
|
||||
|
||||
#ifndef CG1_TRACER_AMBIENTLIGHT_H
|
||||
#define CG1_TRACER_AMBIENTLIGHT_H
|
||||
|
||||
#include "light/light.h"
|
||||
|
||||
class AmbientLight : public Light{
|
||||
|
||||
public:
|
||||
AmbientLight(float intensity, Color const &color = Color(1, 1, 1));
|
||||
|
||||
Illumination illuminate(Scene const &scene, Ray const &ray) const override;
|
||||
|
||||
protected:
|
||||
Vector3d direction;
|
||||
};
|
||||
|
||||
|
||||
#endif //CG1_TRACER_AMBIENTLIGHT_H
|
Loading…
Reference in a new issue