/******************************************************************/ /* 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. */ /******************************************************************/ #include #include "lightsourceShader.h" ////////////////// // Constructors // ////////////////// lightsourceShader::lightsourceShader(const std::shared_ptr& lightsource, const std::shared_ptr& reflectanceShader) { assert(lightsource); _lightsource = lightsource; _reflectanceShader = reflectanceShader; } ///////////// // Methods // ///////////// color lightsourceShader::shade(const intersectionPoint& ip, const vec3d& light_dir) const { color result = _lightsource->_emittance(ip); if(_reflectanceShader) result += _reflectanceShader->shade(ip, light_dir); return result; } color lightsourceShader::reflectance(const intersectionPoint& ip, const vec3d& light_dir) const { return (_reflectanceShader) ? _reflectanceShader->reflectance(ip, light_dir) : color(); } brdfSample lightsourceShader::sample(const intersectionPoint& ip, float r1, float r2) const { return (_reflectanceShader) ? _reflectanceShader->sample(ip, r1, r2) : brdfSample(); } float lightsourceShader::reflectivity(const intersectionPoint& ip) const { return (_reflectanceShader) ? _reflectanceShader->reflectivity(ip) : 0.0f; } shaderProperties lightsourceShader::properties(const intersectionPoint& ip) const { return (_reflectanceShader) ? _reflectanceShader->properties(ip) : shaderProperties(false, false); } color lightsourceShader::emittance(const intersectionPoint& ip) const { return _lightsource->_emittance(ip); } /////////////////////// // Protected Methods // /////////////////////// void lightsourceShader::_print(std::ostream& s) const { s << "LightsourceShader: light=" << *_lightsource << ", reflectance shader="; if(_reflectanceShader) s << *_reflectanceShader; else s << "None."; }