diff options
Diffstat (limited to 'hw6/src/linear_intersector.cpp')
-rw-r--r-- | hw6/src/linear_intersector.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/hw6/src/linear_intersector.cpp b/hw6/src/linear_intersector.cpp new file mode 100644 index 0000000..c7cb37e --- /dev/null +++ b/hw6/src/linear_intersector.cpp @@ -0,0 +1,53 @@ +/******************************************************************/ +/* 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 "linear_intersector.h" + +////////////////// +// Constructors // +////////////////// +linear_intersector::linear_intersector(void) + : intersector_base() +{ + // Do nothing +} + + +linear_intersector::linear_intersector(const std::vector<std::shared_ptr<const boundedPrimitive>>& compounds) + : intersector_base() +{ + _compounds = compounds; +} + + +///////////// +// Methods // +///////////// +intersectionPoint linear_intersector::intersect(const ray& r) const +{ + intersectionPoint ip; + + // if no compounds registered => no hit. + if(_compounds.empty()) return ip; + + // cycle through the list + for(auto itr=_compounds.begin(); itr != _compounds.end(); itr++) + { + // intersect + intersectionPoint newIp = (*itr)->intersect(r); + + // keep track of closest + if(newIp < ip) ip = newIp; + } + + // Done. + return ip; +} + + + |