Browse Source

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
main
cinnaboot 5 months ago
parent
commit
c288755ec4
  1. 8
      src/renderer.cpp

8
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;
}

Loading…
Cancel
Save