Skip to content
Snippets Groups Projects
BackgroundMaterial.h 1.08 KiB
Newer Older
Postea's avatar
Postea committed
#pragma once
Yoel's avatar
Yoel committed
#include "../tools/EmissionProfile.h"
Postea's avatar
Postea committed
#include "Material.h"

namespace material {
class BackgroundMaterial : public Material {
Yoel's avatar
Yoel committed
   public:
	BackgroundMaterial(const std::shared_ptr<util::Sampler>& texture);
Yoel's avatar
Yoel committed
	BackgroundMaterial(const std::shared_ptr<util::Sampler>& texture,
	                   const util::Image& distribution);
Yoel's avatar
Yoel committed
	BackgroundMaterial(const util::Vec3& albedo);
Postea's avatar
Postea committed

	util::Vec3 albedo(const std::pair<float, float>& uv) const override;
	util::Vec3 emission(const std::pair<float, float>& uv) const override;
Yoel's avatar
Yoel committed
	std::pair<float, float> sampleEmissionProfile() const override;
	util::Vec3 scattered_d(const util::Vec3& d,
	                       const util::Vec3& n) const override;
	bool scatter(const util::Vec3& d, const util::Vec3& n) const override;

	float calculateLightMultiplier(const util::Vec3& d_in,
	                               const util::Vec3& d_out,
	                               const util::Vec3& n) const override;
Yoel's avatar
Yoel committed
	std::optional<float> emission_pdf(float u, float v) const override;
Postea's avatar
Postea committed

Yoel's avatar
Yoel committed
   private:
Yoel's avatar
Yoel committed
	util::EmissionProfile emission_profile;
Yoel's avatar
Yoel committed
}  // namespace material