diff options
Diffstat (limited to 'hw6/src/reflectanceParameter.cpp')
-rw-r--r-- | hw6/src/reflectanceParameter.cpp | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/hw6/src/reflectanceParameter.cpp b/hw6/src/reflectanceParameter.cpp new file mode 100644 index 0000000..5b918fb --- /dev/null +++ b/hw6/src/reflectanceParameter.cpp @@ -0,0 +1,140 @@ +/******************************************************************/ +/* 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 "reflectanceParameter.h" + +/******************************/ +/* scalarReflectanceParameter */ +/******************************/ + +///////////////// +// Constructor // +///////////////// +scalarReflectanceParameter::scalarReflectanceParameter(float value) +{ + _value = value; + _texture = nullptr; + _channel = 0.0f; +} + + +scalarReflectanceParameter::scalarReflectanceParameter(const std::shared_ptr<const texture_base>& texture, unsigned int channel) +{ + _value = 0.0f; + _texture = texture; + _channel = channel; +} + + +scalarReflectanceParameter::scalarReflectanceParameter(const scalarReflectanceParameter& src) +{ + _value = src._value; + _texture = src._texture; + _channel = src._channel; +} + + +////////////// +// Operator // +////////////// +scalarReflectanceParameter& scalarReflectanceParameter::operator=(const scalarReflectanceParameter& src) +{ + _assign(src); + return *this; +} + + +float scalarReflectanceParameter::operator()(const vec2d& textureCoord) const +{ + if(_texture) return (*_texture)(textureCoord)[_channel]; + else return _value; +} + + +///////////////////// +// Private Methods // +///////////////////// +void scalarReflectanceParameter::_assign(const scalarReflectanceParameter& src) +{ + _value = src._value; + _texture = src._texture; + _channel = src._channel; +} + + +void scalarReflectanceParameter::_swap(scalarReflectanceParameter& swp) +{ + std::swap(_value, swp._value); + std::swap(_texture, swp._texture); + std::swap(_channel, swp._channel); +} + + + +/*****************************/ +/* colorReflectanceParameter */ +/*****************************/ + +///////////////// +// Constructor // +///////////////// +colorReflectanceParameter::colorReflectanceParameter(color value) +{ + _value = value; + _texture = nullptr; +} + + +colorReflectanceParameter::colorReflectanceParameter(const std::shared_ptr<const texture_base>& texture) +{ + _value = color(0.0f); + _texture = texture; +} + + +colorReflectanceParameter::colorReflectanceParameter(const colorReflectanceParameter& src) +{ + _value = src._value; + _texture = src._texture; +} + + +////////////// +// Operator // +////////////// +colorReflectanceParameter& colorReflectanceParameter::operator=(const colorReflectanceParameter& src) +{ + _assign(src); + return *this; +} + + +color colorReflectanceParameter::operator()(const vec2d& textureCoord) const +{ + if(_texture) return (*_texture)(textureCoord); + else return _value; +} + + +///////////////////// +// Private Methods // +///////////////////// +void colorReflectanceParameter::_assign(const colorReflectanceParameter& src) +{ + _value = src._value; + _texture = src._texture; +} + + +void colorReflectanceParameter::_swap(colorReflectanceParameter& swp) +{ + std::swap(_value, swp._value); + std::swap(_texture, swp._texture); +} + + |