diff options
author | 53hornet <53hornet@gmail.com> | 2019-02-02 23:33:15 -0500 |
---|---|---|
committer | 53hornet <53hornet@gmail.com> | 2019-02-02 23:33:15 -0500 |
commit | db072ad4dc181eca5a1458656b130beb43f475bf (patch) | |
tree | a3c03c7f5497cb70503e2486662fa85cfb53415a /hw5/include/lightSample.h | |
download | csci427-master.tar.xz csci427-master.zip |
Diffstat (limited to 'hw5/include/lightSample.h')
-rw-r--r-- | hw5/include/lightSample.h | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/hw5/include/lightSample.h b/hw5/include/lightSample.h new file mode 100644 index 0000000..3dd76b5 --- /dev/null +++ b/hw5/include/lightSample.h @@ -0,0 +1,75 @@ +/******************************************************************/ +/* This file is part of the homework assignments for CSCI-427/527 */ +/* at The College of William & Mary and authored by Pieter Peers. */ +/* No part of this file, whether altered or in original form, can */ +/* be distributed or used outside the context of CSCI-427/527 */ +/* without consent of either the College of William & Mary or */ +/* Pieter Peers. */ +/******************************************************************/ +#ifndef _LIGHTSAMPLE_H_ +#define _LIGHTSAMPLE_H_ + +#include "vec3d.h" +#include "color.h" +#include "constants.h" + +class lightSample { + public: + ////////////////// + // Constructors // + ////////////////// + lightSample(const vec3d& direction=vec3d(0.0f, 0.0f, 0.0f), + const color& emittance=color(0.0f, 0.0f, 0.0f), + float distance=+LARGE, + float pdf=1.0f, + float foreshortening=1.0f); + + lightSample(const lightSample& ls); + + /////////////// + // Operators // + /////////////// + lightSample& operator=(const lightSample& ls); + + const color& operator()(void) const; + + //////////////// + // Inspectors // + //////////////// + const vec3d& directionToPoint(void) const; + vec3d directionToLight(void) const; + + const color& emittance(void) const; + float distance(void) const; + + float pdf(void) const; + float foreshortening(void) const; + + ///////////// + // Friends // + ///////////// + friend void swap(lightSample& a, lightSample& b) { a._swap(b); } + friend std::ostream& operator<<(std::ostream& s, const lightSample& ls) + { + s << "LightSample: direction=" << ls.directionToPoint() << ", emittance=" << ls() << ", distance=" << ls.distance() << ", pdf=" << ls.pdf() << ", foreshortening=" << ls.foreshortening(); + return s; + } + + private: + ///////////////////// + // Private Methods // + ///////////////////// + void _assign(const lightSample& ls); + void _swap(lightSample& ls); + + ////////////////// + // Data Members // + ////////////////// + vec3d _direction; + color _emittance; + float _distance; + float _pdf; + float _foreshortening; +}; + +#endif /* _LIGHTSAMPLE_H_ */ |