/******************************************************************/ /* 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. */ /******************************************************************/ #ifndef _BOUNDED_PRIMITIVE_H_ #define _BOUNDED_PRIMITIVE_H_ #include #include #include #include "ray.h" #include "shader_base.h" #include "boundingBox.h" #include "surfaceSample.h" #include "intersectionPoint.h" class boundedPrimitive { public: ///////////////// // Constructor // ///////////////// boundedPrimitive(void); boundedPrimitive(const boundingBox& bb, const std::shared_ptr& shader); boundedPrimitive(const boundedPrimitive&) = delete; /////////////// // Operators // /////////////// boundedPrimitive& operator=(const boundedPrimitive& ) = delete; ///////////// // Methods // ///////////// const boundingBox& boundingbox(void) const; bool hitBoundingBox(const ray& r) const; virtual bool hasShader(void) const; virtual intersectionPoint intersect(const ray& r) const = 0; virtual float area(void) const = 0; virtual surfaceSample sample(float r1, float r2) const = 0; ///////////// // Friends // ///////////// friend std::ostream& operator<<(std::ostream& s, const boundedPrimitive& bp) { bp._print(s); return s; } protected: /////////////////////// // Protected Methods // /////////////////////// virtual void _print(std::ostream& s) const; ////////////////// // Data Members // ////////////////// boundingBox _bb; std::shared_ptr _shader; }; #endif /* _BOUNDED_PRIMITIVE_H_ */