diff options
author | Yann Herklotz <git@yannherklotz.com> | 2020-10-10 00:12:12 +0100 |
---|---|---|
committer | Yann Herklotz <git@yannherklotz.com> | 2020-10-10 00:12:12 +0100 |
commit | 495d1c9c113098f24767b595c7e830f0fa8bc991 (patch) | |
tree | 95eac21eacecadc58f23a59216e764ddd6928979 /src/utils.rs | |
parent | dd5ac7c5fe336e9cac794cfa72d139613a99b466 (diff) | |
download | leela-495d1c9c113098f24767b595c7e830f0fa8bc991.tar.gz leela-495d1c9c113098f24767b595c7e830f0fa8bc991.zip |
Format all the files and add moving sphere
Diffstat (limited to 'src/utils.rs')
-rw-r--r-- | src/utils.rs | 51 |
1 files changed, 33 insertions, 18 deletions
diff --git a/src/utils.rs b/src/utils.rs index 659de7d..7e8c51f 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,51 +1,66 @@ use cgmath::prelude::*; -use cgmath::{Vector3, vec3, dot}; +use cgmath::{dot, vec3, Vector3}; use rand::prelude::*; use std::f64::consts::PI; pub fn clamp(x: f64, min: f64, max: f64) -> f64 { - if x < min { min } - else if x > max { max } - else { x } + if x < min { + min + } else if x > max { + max + } else { + x + } } pub fn print_colour(colour: &Vector3<f64>, samples: i32) { let scolour = colour.map(|x| (x / samples as f64).sqrt()); - println!("{} {} {}" - , (256.0 * clamp(scolour.x, 0.0, 0.999)) as i32 - , (256.0 * clamp(scolour.y, 0.0, 0.999)) as i32 - , (256.0 * clamp(scolour.z, 0.0, 0.999)) as i32) + println!( + "{} {} {}", + (256.0 * clamp(scolour.x, 0.0, 0.999)) as i32, + (256.0 * clamp(scolour.y, 0.0, 0.999)) as i32, + (256.0 * clamp(scolour.z, 0.0, 0.999)) as i32 + ) } pub fn random_vector3(rng: &mut ThreadRng, min: f64, max: f64) -> Vector3<f64> { - vec3(rng.gen_range(min, max), rng.gen_range(min, max), rng.gen_range(min, max)) + vec3( + rng.gen_range(min, max), + rng.gen_range(min, max), + rng.gen_range(min, max), + ) } pub fn random_in_unit_sphere(rng: &mut ThreadRng) -> Vector3<f64> { loop { let p = random_vector3(rng, -1.0, 1.0); - if p.magnitude2() <= 1.0 { return p } + if p.magnitude2() <= 1.0 { + return p; + } } } pub fn random_unit_vector(rng: &mut ThreadRng) -> Vector3<f64> { - let a = rng.gen_range(0.0, 2.0*PI); + let a = rng.gen_range(0.0, 2.0 * PI); let z = rng.gen_range(-1.0, 1.0); - let r = ((1.0 - z*z) as f64).sqrt(); - vec3(r*a.cos(), r*a.sin(), z) + let r = ((1.0 - z * z) as f64).sqrt(); + vec3(r * a.cos(), r * a.sin(), z) } pub fn random_in_hemisphere(rng: &mut ThreadRng, normal: &Vector3<f64>) -> Vector3<f64> { let in_unit_sphere = random_in_unit_sphere(rng); - if dot(in_unit_sphere, *normal) > 0.0 { in_unit_sphere } - else { -in_unit_sphere } + if dot(in_unit_sphere, *normal) > 0.0 { + in_unit_sphere + } else { + -in_unit_sphere + } } pub fn random_in_unit_disk(rng: &mut ThreadRng) -> Vector3<f64> { loop { let p = vec3(rng.gen_range(-1.0, 1.0), rng.gen_range(-1.0, 1.0), 0.0); if p.magnitude2() < 1.0 { - return p + return p; } } } @@ -56,13 +71,13 @@ pub fn reflect(v: &Vector3<f64>, n: &Vector3<f64>) -> Vector3<f64> { pub fn refract(uv: &Vector3<f64>, n: &Vector3<f64>, etai_over_etat: f64) -> Vector3<f64> { let cos_theta = dot(-1.0 * uv, *n); - let r_out_parallel = etai_over_etat * (uv + cos_theta*n); + let r_out_parallel = etai_over_etat * (uv + cos_theta * n); let r_out_perp = -(1.0 - r_out_parallel.magnitude2()).sqrt() * n; r_out_parallel + r_out_perp } pub fn schlick(cosine: f64, ref_idx: f64) -> f64 { let r0 = (1.0 - ref_idx) / (1.0 + ref_idx); - let r0sq = r0*r0; + let r0sq = r0 * r0; r0sq + (1.0 - r0) * (1.0 - cosine).powi(5) } |