Newer
Older
BackgroundMaterial::BackgroundMaterial(
const std::shared_ptr<util::Sampler>& texture)
: emission_profile({texture}) {
}
BackgroundMaterial::BackgroundMaterial(
const std::shared_ptr<util::Sampler>& texture,
const util::Image& distribution)
: emission_profile({texture, distribution}) {
BackgroundMaterial::BackgroundMaterial(const util::Vec3& albedo)
: emission_profile({std::make_shared<Constant>(albedo)}) {
util::Vec3 BackgroundMaterial::albedo(const std::pair<float, float>& uv) const {
util::Vec3 BackgroundMaterial::emission(
const std::pair<float, float>& uv) const {
return emission_profile.color(uv.first, uv.second);
}
std::pair<float, float> BackgroundMaterial::sampleEmissionProfile() const {
return emission_profile.sample();
}
std::optional<float> BackgroundMaterial::emission_pdf(float u, float v) const {
return emission_profile.pdf(u, v);
util::Vec3 BackgroundMaterial::scattered_d(const util::Vec3& d,
const util::Vec3& n) const {
bool BackgroundMaterial::scatter(const util::Vec3& d,
const util::Vec3& n) const {
float BackgroundMaterial::calculateLightMultiplier(const util::Vec3& d_in,
const util::Vec3& d_out,
const util::Vec3& n) const {
// Background should not be able to receive any light
return 0;
}