diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | Cargo.toml | 6 | ||||
-rw-r--r-- | src/main.rs | 40 |
3 files changed, 47 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..b71bd93 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "tracer" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..06f041c --- /dev/null +++ b/src/main.rs @@ -0,0 +1,40 @@ +use std::fs::File; +use std::io::Write; + +const IMG_WIDTH: usize = 256; +const IMG_HEIGHT: usize = 256; + +struct Pixel { + r: u8, + g: u8, + b: u8, +} + +fn main() { + let mut txt_data = String::from("P3\n"); + txt_data.push_str(format!("{} {}\n255\n", IMG_WIDTH, IMG_HEIGHT).as_str()); + + (0..IMG_HEIGHT).for_each(|j| { + (0..IMG_WIDTH).for_each(|i| { + let r = i as f32 / IMG_WIDTH as f32; + let g = j as f32 / IMG_HEIGHT as f32; + let b = 0.0f32; + + let ir = (255.999 * r) as u8; + let ig = (255.999 * g) as u8; + let ib = (255.999 * b) as u8; + + txt_data.push_str(&format!("{} {} {}\n", ir, ig, ib)); + }) + }); + + match write_file("output.ppm", txt_data.as_str()) { + Ok(_) => {println!("PPM file writen")}, + Err(e) => {println!("Error writing file {}", e)} + } +} + +fn write_file(file_path: &str, txt_data: &str) -> Result<(), std::io::Error> { + let mut file = File::create(file_path)?; + file.write_all(txt_data.as_bytes()) +} |