From ed1bc978288249bdb1204d67c22c5186b78aea98 Mon Sep 17 00:00:00 2001 From: Altagos Date: Thu, 29 Feb 2024 15:21:22 +0100 Subject: [PATCH] added a sphere --- src/ray.zig | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/ray.zig b/src/ray.zig index 0e41229..5e8a6dd 100644 --- a/src/ray.zig +++ b/src/ray.zig @@ -13,7 +13,20 @@ pub fn init(origin: zm.Vec, direction: zm.Vec) Ray { } pub fn color(self: *Ray) zm.Vec { + if (hit_sphere(zm.f32x4(0, 0, -1, 0), 0.5, self)) { + return zm.f32x4(1, 0, 0, 1); + } + const unit_direction = zm.normalize3(self.dir); const a = 0.5 * (unit_direction[1] + 1.0); return zm.f32x4s(1.0 - a) * zm.f32x4s(1.0) + zm.f32x4s(a) * zm.f32x4(0.5, 0.7, 1.0, 1.0); } + +fn hit_sphere(center: zm.Vec, radius: f32, r: *Ray) bool { + const oc = r.orig - center; + const a = zm.dot3(r.dir, r.dir)[0]; + const b = 2.0 * zm.dot3(oc, r.dir)[0]; + const c = zm.dot3(oc, oc)[0] - radius * radius; + const discriminant = b * b - 4 * a * c; + return discriminant >= 0; +} -- 2.51.2