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 --- src/camera.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'src/camera.cpp') diff --git a/src/camera.cpp b/src/camera.cpp index 21cf506..520cc1e 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -1,14 +1,22 @@ #include "camera.hpp" -camera::camera(point3 position, double aspect_ratio, double focal_length) - : position(position), focal_length(focal_length) { - auto viewport_height = 2.0; - auto viewport_width = viewport_height * aspect_ratio; +#include "rt.hpp" - horizontal = vec3 { viewport_width, 0.0, 0.0 }; - vertical = vec3 { 0.0, viewport_height, 0.0 }; +camera::camera(point3 position, point3 target, double v_fov, double aspect_ratio) + : position(position) { - bottom_left_pixel = position - horizontal / 2.0 - vertical / 2.0 - vec3 { 0.0, 0.0, focal_length }; + auto forward = (position - target).unit(); + auto right = vec3{ 0.0, 1.0, 0.0 }.cross(forward).unit(); + auto up = forward.cross(right).unit(); + + auto h = tan(deg_to_rad(v_fov) / 2.0); + auto viewport_height = 2.0 * h; + auto viewport_width = viewport_height * aspect_ratio; + + horizontal = viewport_width * right; + vertical = viewport_height * up; + + bottom_left_pixel = position - horizontal / 2.0 - vertical / 2.0 - forward; } ray camera::get_ray(double u, double v) const { -- cgit v1.3