/******************************************************************/ /* 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 "boundedTriangle.h" ////////////////// // Constructors // ////////////////// boundedTriangle::boundedTriangle(void) : boundedPrimitive() { // Nothing } boundedTriangle::boundedTriangle(const triangle& tri, const std::shared_ptr& shader) : boundedPrimitive(tri.boundingbox(), shader) { _triangle = tri; } ///////////// // Methods // ///////////// intersectionPoint boundedTriangle::intersect(const ray& r) const { // intersect triangle float t; vec3d bc; bool hit = _triangle.intersect(r, bc, t); // empty ip if not hit if(!hit) return intersectionPoint(); // if hit, create intersectionPoint record. else return intersectionPoint(r, t, _shader, _triangle.normal(bc), _triangle.shadingAxis(), _triangle.textureCoordinate(bc)); } float boundedTriangle::area(void) const { return _triangle.area(); } surfaceSample boundedTriangle::sample(float r1, float r2) const { float pdf; vec3d bc, position = _triangle.sample(r1, r2, bc, pdf); return surfaceSample(position, _triangle.normal(bc), pdf); } void boundedTriangle::_print(std::ostream& s) const { s << "boundedTriangle (" << _bb << ", " << _triangle << ")"; }