Skip to content
Snippets Groups Projects
LightSingleGroup.cpp 1.06 KiB
Newer Older
#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