/******************************************************************/ /* 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 "bvh_intersector.h" #include "boundedVolumeNode.h" ////////////////// // Constructors // ////////////////// bvh_intersector::bvh_intersector(void) : intersector_base() { // Do nothing } bvh_intersector::bvh_intersector(const std::vector>& compounds) : intersector_base() { // quick bail out if no compounds provided if(compounds.empty()) return; // make a copy std::vector> compoundCopy = compounds; // create node // trivial case: only a single node if(compounds.size() == 1) _root = compounds[0]; // compound case: create a bvh else _root = std::shared_ptr(new boundedVolumeNode(compoundCopy.begin(), compoundCopy.end())); } ///////////// // Methods // ///////////// intersectionPoint bvh_intersector::intersect(const ray& r) const { // check if BVH exists => empty intersection point if not. if(!_root) return intersectionPoint(); // intersect return _root->intersect(r); }