aboutsummaryrefslogtreecommitdiffstats
path: root/src/camera.cpp
diff options
context:
space:
mode:
authorladevieq <ladevie.quentin@gmail.com>2020-12-21 23:13:25 +0100
committerladevieq <ladevie.quentin@gmail.com>2020-12-21 23:13:25 +0100
commit8da53c5f262b09756e1a93257cdcd5be25807839 (patch)
treec34344074ca8766dafcbf27958f571bf14c35315 /src/camera.cpp
parent56bed8e38f5b6d9effd77371ad781ae71601205b (diff)
Movable and rotatable camera + dielectric materials
Diffstat (limited to 'src/camera.cpp')
-rw-r--r--src/camera.cpp22
1 files changed, 15 insertions, 7 deletions
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 {