aboutsummaryrefslogtreecommitdiffstats
path: root/src/camera.rs
blob: 8090bde4edd65acb1a6c95d6f24b8947dbea02c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use cgmath::{Vector3, vec3};
use crate::ray::Ray;

pub struct Camera {
    origin: Vector3<f64>,
    lower_left_corner: Vector3<f64>,
    horizontal: Vector3<f64>,
    vertical: Vector3<f64>
}

impl Camera {
    pub fn new() -> Camera {
        Camera {
            origin: vec3(0.0, 0.0, 0.0),
            lower_left_corner: vec3(-2.0, -1.0, -1.0),
            horizontal: vec3(4.0, 0.0, 0.0),
            vertical: vec3(0.0, 2.0, 0.0)
        }
    }

    pub fn get_ray(&self, u: f64, v: f64) -> Ray {
        Ray::new(self.origin,
                 self.lower_left_corner + u * self.horizontal + v * self.vertical)
    }
}