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,