Skip to content
Snippets Groups Projects
Material.h 1.02 KiB
Newer Older
Postea's avatar
Postea committed
#pragma once
Yoel's avatar
Yoel committed
#include <random>

#include "../sampling/Sampler.h"
#include "../tools/Vec3.h"
Postea's avatar
Postea committed
namespace material {

class Material {
Yoel's avatar
Yoel committed
   public:
	virtual util::Vec3 albedo(const std::pair<float, float>& uv) const = 0;
	virtual util::Vec3 emission(const std::pair<float, float>& uv) const = 0;
	virtual std::pair<float, float> sampleEmissionProfile() const = 0;
Yoel's avatar
Yoel committed
	virtual util::Vec3 scattered_d(const util::Vec3& d,
	virtual bool scatter(const util::Vec3& d, const util::Vec3& n) const = 0;
	virtual float calculateLightMultiplier(const util::Vec3& d_in,
	                                       const util::Vec3& d_out,
	                                       const util::Vec3& n) const = 0;
	virtual float brdf_pdf(const util::Vec3& d_out,
	                       const util::Vec3& n) const = 0;
	virtual std::optional<float> emission_pdf(float u, float v) const = 0;
util::Vec3 reflection(const util::Vec3& d, const util::Vec3& n);
Yoel's avatar
Yoel committed
}  // namespace material