#include "LightSingleGroup.h" #include "../material/Material.h" #include "../tools/Vec3.h" namespace shapes { LightSingleGroup::LightSingleGroup(const util::Transformation& transform, std::shared_ptr<Light> light) : light(light), transform(transform) { } LightSingleGroup::LightSingleGroup(const util::Mat4& matrix, std::shared_ptr<Light> light) : light(light), transform(util::Transformation(matrix)) { } util::SurfacePoint LightSingleGroup::sampleLight() const { auto sample = light->sampleLight(); return util::SurfacePoint(transform.toWorld.transformPoint(sample.point()), transform.toWorldN.transformDir(sample.normal()), sample.material); } util::Vec3 LightSingleGroup::calculateLightEmission(const util::SurfacePoint& p, const util::Vec3& d) const { return light->calculateLightEmission(p, transform.fromWorld.transformDir(d)); } } // namespace shapes