Newer
Older

Yoel
committed
#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