/******************************************************************/ /* 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& 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& 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); }