diff --git a/disk_area_light.cpp b/disk_area_light.cpp index 388b483..f49bdd1 100644 --- a/disk_area_light.cpp +++ b/disk_area_light.cpp @@ -14,7 +14,7 @@ float d, att, ln_dot_d, d2, g; l_dir = normalize(direction(i_pos)); ln_dot_d = dot(-m_n_at_last_sample, l_dir); if (ln_dot_d > 0.0f) { - d2 = glm::distance(m_last_sample, i_pos); + d2 = distance(i_pos); d2 *= d2; g = ln_dot_d / d2; d = distance(i_pos); diff --git a/light.hpp b/light.hpp index 84ac850..84309e4 100644 --- a/light.hpp +++ b/light.hpp @@ -10,6 +10,7 @@ using glm::vec3; using glm::length; +using glm::normalize; class Light { public: @@ -61,7 +62,7 @@ public: AreaLight(Figure * _f): Light(AREA), m_figure(_f), m_last_sample(vec3()), m_n_at_last_sample(vec3()) { } virtual vec3 direction(vec3 point) const { - return m_last_sample - point; + return normalize(m_last_sample - point); } virtual float distance(vec3 point) const { diff --git a/output.png b/output.png index e498248..e279cc2 100644 Binary files a/output.png and b/output.png differ diff --git a/point_light.cpp b/point_light.cpp index ff125ad..62142a5 100644 --- a/point_light.cpp +++ b/point_light.cpp @@ -23,7 +23,7 @@ vec3 PointLight::diffuse(vec3 normal, Ray & r, vec3 i_pos, Material & m) const { float d, att; vec3 l_dir, ref; - l_dir = normalize(direction(i_pos)); + l_dir = direction(i_pos); d = distance(i_pos); att = 1.0f / (m_const_att + (m_lin_att * d) + (m_quad_att * (d * d))); @@ -34,7 +34,7 @@ vec3 PointLight::specular(vec3 normal, Ray & r, vec3 i_pos, Material & m) const float d, att; vec3 l_dir, ref; - l_dir = normalize(direction(i_pos)); + l_dir = direction(i_pos); d = distance(i_pos); att = 1.0f / (m_const_att + (m_lin_att * d) + (m_quad_att * (d * d))); diff --git a/scenes/scene6.json b/scenes/scene6.json index b9b22d1..b211236 100644 --- a/scenes/scene6.json +++ b/scenes/scene6.json @@ -1,7 +1,6 @@ { - "disk_area_light": { - "position": [0.0, 0.75, -1.0], - "normal": [0.0, -1.0, 0.0], + "sphere_area_light": { + "position": [0.0, 0.95, -1.0], "radius": 0.15, "material": { "emission": [1.0, 1.0, 1.0] diff --git a/spot_light.cpp b/spot_light.cpp index 5d5a551..7f0619a 100644 --- a/spot_light.cpp +++ b/spot_light.cpp @@ -17,7 +17,7 @@ vec3 SpotLight::diffuse(vec3 normal, Ray & r, vec3 i_pos, Material & m) const { float d, att, spot_effect; vec3 l_dir, ref; - l_dir = normalize(direction(i_pos)); + l_dir = direction(i_pos); d = distance(i_pos); spot_effect = dot(m_spot_dir, -l_dir); @@ -34,7 +34,7 @@ vec3 SpotLight::specular(vec3 normal, Ray & r, vec3 i_pos, Material & m) const { float d, att, spot_effect; vec3 l_dir, ref; - l_dir = normalize(direction(i_pos)); + l_dir = direction(i_pos); d = distance(i_pos); spot_effect = dot(m_spot_dir, -l_dir);