/******************************************************************/ /* 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 "constants.h" #include "pointLightsource.h" ////////////////// // Constructors // ////////////////// pointLightsource::pointLightsource(const vec3d& position, const color& power, const vec3d& attenuation) { _position = position; _power = power; _attenuation = attenuation; } ///////////// // Methods // ///////////// lightSample pointLightsource::intensityAt(const vec3d& point) const { vec3d direction = point - _position; float distance = direction.length(); float attenuation = ((_attenuation[2]*distance + _attenuation[1])*distance + _attenuation[0]); // Done. return lightSample(direction, _power / attenuation, distance); } lightSample pointLightsource::emittanceAt(const vec3d& point, float r1, float r2) const { vec3d direction = point - _position; float distance = direction.length(); // emittance == _power / area sphere // pdf = 1.0 (there is no selection) // foreshortning = 1.0 (everything is normal to the point) return lightSample(direction, _power / (4.0f * PI), distance, 1.0f, 1.0f); } ///////////////////// // Private Methods // ///////////////////// void pointLightsource::_print(std::ostream& s) const { s << "Point Lightsource: position=" << _position << ", power=" << _power << ", attenuation=" << _attenuation; }