summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRosyid Haryadi <rosyid_haryadi@protonmail.com>2025-02-26 03:56:04 +0700
committerRosyid Haryadi <rosyid_haryadi@protonmail.com>2025-02-26 03:56:04 +0700
commit50acfdefe298b55db30f06f9ecd91428af192daf (patch)
tree8787b390c22bd4b9a72a4c22abce60ae9fc42f10
init
-rw-r--r--.gitignore1
-rw-r--r--Cargo.toml6
-rw-r--r--src/main.rs40
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())
+}