Area lights fixed.

This commit is contained in:
Miguel Angel Astor Romero
2017-02-13 16:14:17 -04:00
parent a5b7fc0406
commit e485ce2cda
6 changed files with 9 additions and 9 deletions

View File

@@ -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);

View File

@@ -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 {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 469 KiB

After

Width:  |  Height:  |  Size: 536 KiB

View File

@@ -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)));

View File

@@ -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]

View File

@@ -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);