blob: f399f8e6940c97c9a5a86cd70e9801659e9a3e0e (
plain) (
tree)
|
|
/******************************************************************/
/* 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 <cassert>
#include "lightsourceShader.h"
//////////////////
// Constructors //
//////////////////
lightsourceShader::lightsourceShader(const std::shared_ptr<const lightsource_base>& lightsource, const std::shared_ptr<const shader_base>& 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.";
}
|