/******************************************************************/ /* 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_COMPOUND_H_ #define _BOUNDED_COMPOUND_H_ #include "intersector_base.h" #include "transformation3d.h" #include "boundedPrimitive.h" class boundedCompound : public boundedPrimitive { public: ///////////////// // Constructor // ///////////////// boundedCompound(void); boundedCompound(const transformation3d& transform, const std::shared_ptr& shader=nullptr); boundedCompound(const boundedCompound&) = delete; /////////////// // Operators // /////////////// boundedCompound& operator=(const boundedCompound&) = delete; ///////////// // Methods // ///////////// void initialize(const class intersector_factory_base& ifb); virtual bool hasShader(void) const override; virtual intersectionPoint intersect(const ray& r) const final override; virtual float area(void) const final override; virtual surfaceSample sample(float r1, float r2) const final override; virtual const std::vector>& compounds(void) const = 0; protected: /////////////////////// // Protected Methods // /////////////////////// void initializeBoundingBox(void); virtual void _print(std::ostream& s) const override; ////////////////// // Data Members // ////////////////// transformation3d _transform; std::unique_ptr _intersector; }; #endif /* _BOUNDED_COMPOUND_H_ */