From 0065a45e7df429a27d8a6d23f30827f3a925de95 Mon Sep 17 00:00:00 2001 From: numzero Date: Tue, 25 Nov 2025 14:40:53 +0300 Subject: [PATCH] avoid crashes on dir=0 --- src/camera.rs | 6 ++++++ src/lib.rs | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/camera.rs b/src/camera.rs index a91e1a7..06542e2 100644 --- a/src/camera.rs +++ b/src/camera.rs @@ -20,6 +20,12 @@ impl OrbitalCamera { self.distance * vec3(xy * x, xy * y, z) } + pub fn direction(&self) -> Vec3 { + let (y, x) = self.position_yaw.sin_cos(); + let (z, xy) = self.position_pitch.sin_cos(); + -vec3(xy * x, xy * y, z) + } + pub fn transform(&self) -> Mat4 { // for yaw=0, pitch=0: // X -> -Z diff --git a/src/lib.rs b/src/lib.rs index 432b3b7..746879b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -393,7 +393,10 @@ impl Core { .map(|&v| { let pos = obj.position + obj.radius * v; let normal = v; - let dir = (pos - camera.position()).normalize(); + let mut dir = (pos - camera.position()).normalize(); + if !dir.is_finite() { + dir = camera.direction(); + } let light = light_at(Hit { incident: Ray::new(pos, dir), normal,