/******************************************************************/ /* 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 #include "constants.h" #include "environmentMap.h" ////////////////// // Constructors // ////////////////// environmentMap::environmentMap(const std::shared_ptr& map, const transformation3d& transform) { _map = map; _transform = transform; } environmentMap::environmentMap(const environmentMap& src) { _map = src._map; _transform = src._transform; } /////////////// // Operators // /////////////// environmentMap environmentMap::operator=(const environmentMap& src) { _assign(src); return *this; } color environmentMap::operator()(const vec3d& direction) const { // normalize & apply transformation vec3d dir = _transform.inverseTransformDirection(normalize(direction)); // compute spherical coordinates float theta = acos(dir.z); float phi = atan2(dir.y, dir.x); if(phi < 0.0f) phi += 2.0f * PI; // get texel return _map->operator()(vec2d(0.5f * phi / PI, theta / PI)); } /////////////////////// // Protected Methods // /////////////////////// void environmentMap::_assign(const environmentMap& src) { if(&src == this) return; _map = src._map; _transform = src._transform; } void environmentMap::_swap(environmentMap& swp) { std::swap(_map, swp._map); swap(_transform, swp._transform); } void environmentMap::_print(std::ostream& s) const { s << "Environment Map (" << *_map << ", " << _transform << ")"; }