From c288755ec4c762cecfc024c0e990f032bf828955 Mon Sep 17 00:00:00 2001 From: cinnaboot Date: Fri, 30 Jan 2026 09:15:43 -0500 Subject: [PATCH] Fix camera distance to account for body size when switching targets - Ensure camera is always at least INITIAL_DISTANCE_RADIUS_MULTIPLIER (100x) away from target body's radius - get_initial_camera_distance() returns max(average_children_distance, body_radius * 100) when children exist - get_initial_camera_distance() returns body_radius * 100 when no children - Prevents camera clipping when switching from Sun (large radius) to Earth (small radius) with close children --- src/renderer.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/renderer.cpp b/src/renderer.cpp index 7536e36..b07eb61 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -328,12 +328,14 @@ float get_initial_camera_distance(CelestialBody* body, SimulationState* sim, Ren } } + float body_radius = scale_radius(body->radius, render_state->distance_scale); + if (child_count > 0) { - return (float)(total_distance / child_count); + float average_distance = (float)(total_distance / child_count); + float min_distance_from_radius = body_radius * INITIAL_DISTANCE_RADIUS_MULTIPLIER; + return (average_distance > min_distance_from_radius) ? average_distance : min_distance_from_radius; } - // No children - use body radius multiplier as fallback - float body_radius = scale_radius(body->radius, render_state->distance_scale); return body_radius * INITIAL_DISTANCE_RADIUS_MULTIPLIER; }