/******************************************************************/ /* 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 _BRDF_BASE_H_ #define _BRDF_BASE_H_ #include #include "vec3d.h" #include "color.h" #include "brdfSample.h" class brdf_base { public: ///////////// // Methods // ///////////// // Note: 'in' and 'out' point away from the surface point // Note: 'in' and 'out' are specified in the local shading frame, // where the normal=(0.0, 0.0, 1.0). virtual color shade(const vec3d& in, const vec3d& out) const = 0; // Same convention for in and out. // Returns: reflected radiance virtual color reflectance(const vec3d& in, const vec3d& out) const = 0; // Same convention for in and out. // r1 and r2 are two uniform random variables. // Returns: brdfSample record virtual brdfSample sample(const vec3d& in, float r1, float r2) const = 0; // returns true if BRDF has a specular/diffuse component virtual bool isSpecular(void) const = 0; virtual bool isDiffuse(void) const = 0; // return the total reflectivity of the mateterial virtual float reflectivity(void) const = 0; ///////////// // Friends // ///////////// friend std::ostream& operator<<(std::ostream& s, const brdf_base& b) { b._print(s); return s; } private: ///////////////////// // Private Methods // ///////////////////// virtual void _print(std::ostream& s) const = 0; }; #endif /* _BRDF_BASE_H_ */