Erstes Treffen der Grafik-AG!!!11elf

This commit is contained in:
Jonathan Flueren 2022-04-07 23:04:50 +02:00
commit adb0d8c4c3
6 changed files with 65654 additions and 0 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/target

7
Cargo.lock generated Normal file
View file

@ -0,0 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "renderer"
version = "0.1.0"

8
Cargo.toml Normal file
View file

@ -0,0 +1,8 @@
[package]
name = "renderer"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

65540
image.ppm Normal file

File diff suppressed because it is too large Load diff

22
src/main.rs Normal file
View file

@ -0,0 +1,22 @@
fn main() {
let image_width = 256;
let image_height = 256;
println!("P3\n{image_width} {image_height}\n255\n");
for i in (0..image_height).rev() {
eprint!("\rScanlines remaining: {i:5}");
for j in 0..image_width {
let r = j as f32 / (image_width - 1) as f32;
let g = i as f32 / (image_height - 1) as f32;
let b = 0.25;
let ir = (255.999 * r) as u32;
let ig = (255.999 * g) as u32;
let ib = (255.999 * b) as u32;
println!("{ir} {ig} {ib}");
}
}
eprintln!("\nDone!");
}

76
src/vec3.rs Normal file
View file

@ -0,0 +1,76 @@
struct Vec3 {
pub e: [f64: 3],
}
type Color = Vec3;
type Point3 = Vec3;
impl Vec3 {
pub fn new(x: f64, y: f64, z: f64) -> Self {
Vec3 { e: [x, y, z] }
}
pub fn length() -> f64 {
self.length_squared().sqrt()
}
pub fn length_squared(&self) -> f64 {
self.e[0]*self.e[0]
+ self.e[1]*self.e[1]
+ self.e[2]*self.e[2]
}
pub fn x(&self) -> f64 { self.e[0] }
pub fn y(&self) -> f64 { self.e[1] }
pub fn z(&self) -> f64 { self.e[2] }
}
impl Add for Vec3 {
type Output = Vec3;
fn add(self, rhs: Self) -> Vec3 {
Vec3::new(self.x()+rhs.x(), self.y()+rhs.y(), self.z()+rhs.z());
}
}
impl AddAssign for Vec3 {
fn add_assign(&mut self, rhs: Self) {
self.e[0] += rhs.x();
self.e[1] += rhs.y();
self.e[2] += rhs.z();
}
}
impl Sub for Vec3 {
type Output = Vec3;
fn sub(self, rhs: Self) -> Vec3 {
Vec3::new(self.x()-rhs.x(), self.y()-rhs.y(), self.z()-rhs.z())
}
}
impl Mul<Vec3> for f64 {
type Output = Vec3;
fn mul(self, rhs: Vec3) -> Vec3 {
Vec3::new(self*rhs.x(), self*rhs.y(), self*rhs.z());
}
}
impl MulAssign<f64> for Vec3 {
fn mul_assign(&mut self, rhs: f64) {
self.e[0] *= rhs;
self.e[1] *= rhs;
self.e[2] *= rhs;
}
}
impl DivAssign<f64> for Vec3 {
fn div_assign(&mul self, rhs: f64) {
self.e[0] /= rhs;
self.e[1] /= rhs;
self.e[2] /= rhs;
}
}