summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRosyid Haryadi <rosyid_haryadi@protonmail.com>2025-03-02 10:57:03 +0700
committerRosyid Haryadi <rosyid_haryadi@protonmail.com>2025-03-02 10:57:03 +0700
commitaf5cbc11486b5feed4605b9f9685ed55d9f3710a (patch)
treea9ae4d9868773f65d928c3b3d2d213fce53ace7c
parent01556fee5c6c12dfd172183f197a0e5f2fe8f9ab (diff)
upd switch ray
diffusion method
-rw-r--r--src/calculus.rs2
-rw-r--r--src/camera.rs5
2 files changed, 4 insertions, 3 deletions
diff --git a/src/calculus.rs b/src/calculus.rs
index 8865154..e1e9caf 100644
--- a/src/calculus.rs
+++ b/src/calculus.rs
@@ -34,7 +34,7 @@ pub mod calculus {
)
}
- fn random_unit() -> Vec3 {
+ pub fn random_unit() -> Vec3 {
loop {
let p = Self::random_range(-1.0, 1.0);
let lensq = p.mag_sqr();
diff --git a/src/camera.rs b/src/camera.rs
index 37e99c6..87ba7c3 100644
--- a/src/camera.rs
+++ b/src/camera.rs
@@ -85,10 +85,11 @@ impl Camera {
let mut rec = HitRecord::default();
let ray_t = Interval::new(0.001, f32::INFINITY);
if world.hit(ray, ray_t, &mut rec) {
- let direction = Vec3::random_on_hemisphere(&rec.normal);
+ // let direction = Vec3::random_on_hemisphere(&rec.normal);
+ let direction = rec.normal.add(&Vec3::random_unit());
let origin = rec.position.clone();
let r = Ray { origin, direction };
- return self.ray_color(&r, world, depth - 1).mul_scalar(0.5);
+ return self.ray_color(&r, world, depth - 1).mul_scalar(0.9);
}
let unit_direction = ray.direction.unit();