diff --git a/RayTracer/tools/SurfacePoint.cpp b/RayTracer/tools/SurfacePoint.cpp index e740eb84afe476aed87d790af912fec1c9694a4a..d84127541348cdd08b9cf3619e0a937a53ec4248 100644 --- a/RayTracer/tools/SurfacePoint.cpp +++ b/RayTracer/tools/SurfacePoint.cpp @@ -6,18 +6,19 @@ namespace util { SurfacePoint::SurfacePoint(const util::Vec3& point, const util::Vec3& n, + const std::pair<float, float>& uv, const std::shared_ptr<material::Material>& material) - : x(point), n(n), material(material) { + : x(point), n(n), uv(uv), material(material) { } cam::Ray SurfacePoint::scattered_ray(const cam::Ray& inc_ray) const { return cam::Ray(x, material->scattered_d(inc_ray.d, n), cam::epsilon, inc_ray.tmax, true); } util::Vec3 SurfacePoint::albedo() const { - return material->albedo(0, 0); + return material->albedo(uv); } util::Vec3 SurfacePoint::emission() const { - return material->emission(0, 0); + return material->emission(uv); } bool SurfacePoint::scatter(const util::Vec3& d, const util::Vec3& n) const { return material->scatter(d, n); @@ -28,6 +29,9 @@ util::Vec3 SurfacePoint::point() const { util::Vec3 SurfacePoint::normal() const { return n; } +std::pair<float, float> SurfacePoint::texel() const { + return uv; +} float SurfacePoint::calculateLightMultiplier(const util::Vec3& d_in, const util::Vec3& d_out, const util::Vec3& n) const { diff --git a/RayTracer/tools/SurfacePoint.h b/RayTracer/tools/SurfacePoint.h index 5c3cbeea2e71f9135d191282b340cd357e0b14bd..fc666e0bac6e59da4233010514c630592247aa57 100644 --- a/RayTracer/tools/SurfacePoint.h +++ b/RayTracer/tools/SurfacePoint.h @@ -7,23 +7,25 @@ namespace util { class SurfacePoint { public: SurfacePoint(const util::Vec3& point, const util::Vec3& n, + const std::pair<float, float>& uv, const std::shared_ptr<material::Material>& material); cam::Ray scattered_ray(const cam::Ray& inc_ray) const; - util::Vec3 albedo() const; // TODO TexelPos - util::Vec3 emission() const; // TODO TexelPos + util::Vec3 albedo() const; + util::Vec3 emission() const; bool scatter(const util::Vec3& d, const util::Vec3& n) const; util::Vec3 point() const; util::Vec3 normal() const; + std::pair<float, float> texel() const; float calculateLightMultiplier(const util::Vec3& d_in, const util::Vec3& d_out, const util::Vec3& n) const; // Attributes - // TODO TexelPos std::shared_ptr<material::Material> material; private: util::Vec3 x, n; + std::pair<float, float> uv; }; } // namespace util