#pragma once #include "Vector.hpp" class Light { public: Vector direction; Vector position; Vector radiance; Vector power; float area; float luminance; Light() {}; Light(const Vector& position, const Vector& radiance) { this->position = position; this->radiance = radiance; luminance = radiance.r + radiance.g + radiance.b; power = radiance; area = 1.0f; } inline float getLuminance() const {return luminance;} virtual float getFormFactor(const Vector& lookpoint, const Vector& normal) const =0; virtual Vector getSample() const =0; virtual bool isPossiblyVisible(const Vector& point) const {return true;} virtual Vector getRadianceAt(const Vector& dir) { return radiance; } };