aboutsummaryrefslogtreecommitdiff
path: root/src/image.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/image.rs')
-rw-r--r--src/image.rs77
1 files changed, 0 insertions, 77 deletions
diff --git a/src/image.rs b/src/image.rs
deleted file mode 100644
index e24c14b..0000000
--- a/src/image.rs
+++ /dev/null
@@ -1,77 +0,0 @@
-use std::io::Write;
-
-use crate::vec3::Color;
-
-pub struct Image {
- width: usize,
- height: usize,
- data: Vec<Pixel>,
-}
-
-#[derive(Clone)]
-struct Pixel {
- color: Color,
- sample_count: u32,
-}
-
-impl Image {
- pub fn new(width: usize, height: usize) -> Image {
- let data = vec![
- Pixel {
- color: Color {
- x: 0.0,
- y: 0.0,
- z: 0.0
- },
- sample_count: 0
- };
- width * height
- ];
- Image {
- width,
- height,
- data,
- }
- }
-
- pub fn add_sample(&mut self, x: usize, y: usize, color: Color) {
- self.data
- .get_mut((y * self.width) + x)
- .unwrap()
- .update(color);
- }
-
- pub fn write(&self, output: &mut impl Write) {
- output.write_fmt(format_args!("P3\n{} {}\n255\n", self.width, self.height)).unwrap();
- for y in (0..self.height).rev() {
- for x in 0..self.width {
- let pixel = self.data.get((y * self.width) + x).unwrap();
- let mut r = pixel.color.x;
- let mut g = pixel.color.y;
- let mut b = pixel.color.z;
-
- // Divide by the number of samples and perform gamma correction for gamma 2
- let scale = 1.0 / pixel.sample_count as f64;
- r = (r * scale).sqrt();
- g = (g * scale).sqrt();
- b = (b * scale).sqrt();
-
- output
- .write_fmt(format_args!(
- "{} {} {}\n",
- (256.0 * r.clamp(0.0, 0.999)) as u32,
- (256.0 * g.clamp(0.0, 0.999)) as u32,
- (256.0 * b.clamp(0.0, 0.999)) as u32,
- ))
- .unwrap();
- }
- }
- }
-}
-
-impl Pixel {
- pub fn update(&mut self, color: Color) {
- self.color += color;
- self.sample_count += 1;
- }
-}