#pragma once #include "light.hpp" class PointLight : public Light { public: PointLight(){} PointLight(const Vector& position, const Vector& radiance, const Vector& direction) : Light(position, radiance) { this->direction = direction; } float getFormFactor(const Vector& lookpoint, const Vector& normal) const { Vector diff; diff.setDifference(lookpoint, position); float dist2 = diff.norm2(); float dist2inv = 1.0f / dist2; return - dist2inv * dist2inv * (diff * normal) * (diff * direction); } Vector getSample() const {return position;} bool isPossiblyVisible(const Vector& point) const { Vector diff; diff.setDifference(point, position); return diff * direction > 0; } };