From 8da53c5f262b09756e1a93257cdcd5be25807839 Mon Sep 17 00:00:00 2001 From: ladevieq Date: Mon, 21 Dec 2020 23:13:25 +0100 Subject: Movable and rotatable camera + dielectric materials --- include/camera.hpp | 5 ++--- include/dielectric.hpp | 18 ++++++++++++++++++ include/rt.hpp | 1 + include/vec3.hpp | 2 ++ 4 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 include/dielectric.hpp (limited to 'include') diff --git a/include/camera.hpp b/include/camera.hpp index 82f7155..0b3d20e 100644 --- a/include/camera.hpp +++ b/include/camera.hpp @@ -1,16 +1,15 @@ #ifndef __CAMERA_HPP_ #define __CAMERA_HPP_ -#include "rt.hpp" +#include "ray.hpp" class camera { public: - camera(point3 position, double aspect_ratio, double focal_length); + camera(point3 position, point3 target, double v_fov, double aspect_ratio); ray get_ray(double u, double v) const; point3 position; - double focal_length; vec3 horizontal; vec3 vertical; diff --git a/include/dielectric.hpp b/include/dielectric.hpp new file mode 100644 index 0000000..91f1541 --- /dev/null +++ b/include/dielectric.hpp @@ -0,0 +1,18 @@ +#ifndef __DIELECTRIC_HPP_ +#define __DIELECTRIC_HPP_ + +#include "material.hpp" + +class dielectric : public material { + public: + dielectric(double index_of_refraction); + + virtual bool scatter(const ray& r, const struct hit_info& info, color& attenuation, ray& scattered) const; + + double ior; + + private: + static double reflectance(double cosine, double ref_idx); +}; + +#endif // !__DIELECTRIC_HPP_ diff --git a/include/rt.hpp b/include/rt.hpp index 2cf3ce2..1294232 100644 --- a/include/rt.hpp +++ b/include/rt.hpp @@ -34,5 +34,6 @@ inline double clamp(double x, double min, double max) { #include "material.hpp" #include "lambertian.hpp" #include "metal.hpp" +#include "dielectric.hpp" #endif // !__RT_HPP_ diff --git a/include/vec3.hpp b/include/vec3.hpp index 317f99b..7d38472 100644 --- a/include/vec3.hpp +++ b/include/vec3.hpp @@ -53,6 +53,8 @@ vec3 operator/(vec3 u, double scale); vec3 reflect(vec3 v, vec3 n); +vec3 refract(const vec3& uv, const vec3& n, double etai_over_etat); + std::ostream& operator<<(std::ostream& out, vec3 vec); vec3 random_in_unit_sphere(); -- cgit v1.3