3 #include <color/specutils.hpp>
5 #include <math3d/vec3.hpp>
6 using namespace ptracey;
14 color(
const SpectrumType &t,
const vec3 &v,
16 : type(t), vdata(v), pdata(p) {}
18 : type(SpectrumType::Illuminant), vdata(p), pdata(p) {
20 color(
const Real &p1,
const Real &p2,
const Real &p3)
21 : type(SpectrumType::RGB), vdata(p1, p2, p3),
24 : type(SpectrumType::RGB), vdata(rgb), pdata(0) {}
26 static vec3 random() {
return vec3::random(); }
27 static vec3 random(Real t1, Real t2) {
28 return vec3::random(t1, t2);
30 color &operator*=(
const Real &t) {
36 auto nvdata = vdata * c.vdata;
37 auto npdata = pdata * c.pdata;
45 auto nvdata = vdata / c.vdata;
46 auto npdata = pdata / c.pdata;
47 color nc(type, nvdata, npdata);
50 color operator/(
const Real &c)
const {
51 auto nvdata = vdata / c;
52 auto npdata = pdata / c;
53 color nc(type, nvdata, npdata);
56 color operator+(
const Real &c)
const {
57 auto nvdata = vdata + c;
58 auto npdata = pdata + c;
59 color nc(type, nvdata, npdata);
63 auto nvdata = vdata + c.vdata;
64 auto npdata = pdata + c.pdata;
65 color nc(type, nvdata, npdata);
69 inline std::ostream &operator<<(std::ostream &out,
71 return out <<
" color v: " << c.vdata <<
" p: " << c.pdata
72 <<
" t: " << c.type << std::endl;