From 57c2f9241543a7d18eab98077530730d49ee10c2 Mon Sep 17 00:00:00 2001 From: Julian T Date: Thu, 14 Jan 2021 00:56:57 +0100 Subject: Replace color with pbr-book inspired Spectrum class --- src/core/spectrum.cpp | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/core/spectrum.cpp (limited to 'src/core/spectrum.cpp') diff --git a/src/core/spectrum.cpp b/src/core/spectrum.cpp new file mode 100644 index 0000000..d53cf49 --- /dev/null +++ b/src/core/spectrum.cpp @@ -0,0 +1,90 @@ +#include "spectrum.hpp" + +static double clamp(double v, double low = 0, double high = 0) { + if (v < low) { + return low; + } + if (v > high) { + return high; + } + return v; +} + +Spectrum::Spectrum(double v) { + c[0] = v; + c[1] = v; + c[2] = v; +} + +Spectrum Spectrum::FromRGB(double r, double g, double b) { + Spectrum ret; + ret.c[0] = r; + ret.c[1] = g; + ret.c[2] = b; + + return ret; +} + +Spectrum &Spectrum::operator+=(const Spectrum &o) { + c[0] += o.c[0]; + c[1] += o.c[1]; + c[2] += o.c[2]; + + return *this; +} + +Spectrum &Spectrum::operator*=(double o) { + c[0] *= o; + c[1] *= o; + c[2] *= o; + + return *this; +} + +Spectrum Spectrum::operator+(const Spectrum &o) const { + Spectrum ret = *this; + + ret.c[0] += o.c[0]; + ret.c[1] += o.c[1]; + ret.c[2] += o.c[2]; + + return ret; +} + +Spectrum Spectrum::operator-(const Spectrum &o) const { + Spectrum ret = *this; + + ret.c[0] -= o.c[0]; + ret.c[1] -= o.c[1]; + ret.c[2] -= o.c[2]; + + return ret; +} + +Spectrum Spectrum::operator*(const Spectrum &o) const { + Spectrum ret = *this; + + ret.c[0] *= o.c[0]; + ret.c[1] *= o.c[1]; + ret.c[2] *= o.c[2]; + + return ret; +} + +Spectrum Spectrum::operator/(const Spectrum &o) const { + Spectrum ret = *this; + + ret.c[0] /= o.c[0]; + ret.c[1] /= o.c[1]; + ret.c[2] /= o.c[2]; + + return ret; +} + +Spectrum Spectrum::clamp(double low, double high) const { + Spectrum ret; + ret.c[0] = ::clamp(c[0], low, high); + ret.c[1] = ::clamp(c[1], low, high); + ret.c[2] = ::clamp(c[2], low, high); + return ret; +} -- cgit v1.2.3