Newer
Older
#define _USE_MATH_DEFINES
#include "PointLight.h"
#include "../material/BackgroundMaterial.h"
#include "math.h"
namespace shapes {
PointLight::PointLight(const util::Vec3& emission)
: material(std::make_shared<material::BackgroundMaterial>(emission)) {
}
util::SurfacePoint PointLight::sampleLight(const cam::Hit& h) const {
return util::SurfacePoint(util::Vec3(0), h.point().normalize(), {},
material);
}
util::Vec3 PointLight::calculateLightEmission(const util::SurfacePoint& p,
const util::Vec3& d) const {
// Basically this is just the emission at a surface point. And the pdf dimms
// the light in regard to the angle.
auto emission = p.emission();
// Illegally do not divide by area
// auto area = M_PI * std::pow(radius, 2);
auto pdf = std::pow(d.length(), 2);
return emission / pdf;
}
} // namespace shapes