/******************************************************************/ /* 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 { // HW5: Implement this. Computes the intensity from the point // light source toward the 'point' taking in account attenuation. // Modifies: nothing. // Returns: light sample (pass: 1) direction, 2) power/color // of the incident lighting, and 3) distance between // the light source and the point). vec3d direction = (point - _position).normalize(); float distance = _position.distance(point); color emittance = _power / (_attenuation.x + _attenuation.y * distance + _attenuation.z * _position.squared_distance(point)); return lightSample(direction, emittance, distance); } ///////////////////// // Private Methods // ///////////////////// void pointLightsource::_print(std::ostream& s) const { s << "Point Lightsource: position=" << _position << ", power=" << _power << ", attenuation=" << _attenuation; }