add Camerax2
This commit is contained in:
parent
59b169507c
commit
8c58296849
|
@ -12,6 +12,22 @@ impl Camera {
|
|||
let image_height = ((image_width as f32 / aspect_ratio) as i32).max(1);
|
||||
let viewport_width = viewport_height * (image_width as f32 / image_height as f32);
|
||||
|
||||
let viewport_u = Vec3::new(viewport_width, 0.0, 0.0);
|
||||
// image x--> right
|
||||
// |
|
||||
// y
|
||||
// space: y up , x right , z back, -z front
|
||||
let viewport_v = Vec3::new(0.0, -viewport_height, 0.0);
|
||||
// width per pix
|
||||
let viewport_u_delta = viewport_u / (image_width as f32);
|
||||
// height per pix
|
||||
let viewport_v_delta = viewport_v / (image_height as f32);
|
||||
let viewport_top_left_pixel =
|
||||
camera_center + focal_length - viewport_u / 2.0 - viewport_v / 2.0;
|
||||
// padding 0.5* delta u/v
|
||||
let viewport_top_left_pixel_center =
|
||||
viewport_top_left_pixel - viewport_u_delta / 2.0 - viewport_v_delta / 2.0;
|
||||
|
||||
Camera {
|
||||
image_width,
|
||||
image_height,
|
||||
|
@ -20,26 +36,15 @@ impl Camera {
|
|||
viewport_height,
|
||||
camera_center,
|
||||
focal_length,
|
||||
viewport_u,
|
||||
viewport_v,
|
||||
viewport_u_delta,
|
||||
viewport_v_delta,
|
||||
viewport_top_left_pixel_center,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn render(&self, world: &HittableList) -> String {
|
||||
let viewport_u = Vec3::new(self.viewport_width, 0.0, 0.0);
|
||||
// image x--> right
|
||||
// |
|
||||
// y
|
||||
// space: y up , x right , z back, -z front
|
||||
let viewport_v = Vec3::new(0.0, -self.viewport_height, 0.0);
|
||||
// width per pix
|
||||
let viewport_u_delta = viewport_u / (self.image_width as f32);
|
||||
// height per pix
|
||||
let viewport_v_delta = viewport_v / (self.image_height as f32);
|
||||
let viewport_top_left_pixel =
|
||||
self.camera_center + self.focal_length - viewport_u / 2.0 - viewport_v / 2.0;
|
||||
// padding 0.5* delta u/v
|
||||
let viewport_top_left_pixel_center =
|
||||
viewport_top_left_pixel - viewport_u_delta / 2.0 - viewport_v_delta / 2.0;
|
||||
|
||||
let mut img_content = format!("P3\n{} {}\n255\n", self.image_width, self.image_height);
|
||||
|
||||
for j in 0..self.image_height {
|
||||
|
@ -49,9 +54,9 @@ impl Camera {
|
|||
|
||||
for i in 0..self.image_width {
|
||||
// every pixcel's position
|
||||
let pixel_center = viewport_top_left_pixel_center
|
||||
+ (i as f32 * viewport_u_delta)
|
||||
+ (j as f32 * viewport_v_delta);
|
||||
let pixel_center = self.viewport_top_left_pixel_center
|
||||
+ (i as f32 * self.viewport_u_delta)
|
||||
+ (j as f32 * self.viewport_v_delta);
|
||||
// Vector(camera, pixcel)
|
||||
let ray_direction = pixel_center - self.camera_center;
|
||||
// ray
|
||||
|
|
|
@ -36,6 +36,11 @@ pub struct Camera {
|
|||
pub viewport_height: f32,
|
||||
pub camera_center: Point,
|
||||
pub focal_length: Vec3,
|
||||
pub viewport_u: Vec3,
|
||||
pub viewport_v: Vec3,
|
||||
pub viewport_u_delta: Vec3,
|
||||
pub viewport_v_delta: Vec3,
|
||||
pub viewport_top_left_pixel_center: Vec3,
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue