From 395537540c5035cb2b1b96f5d6809163ade9ceb9 Mon Sep 17 00:00:00 2001 From: cinnaboot Date: Fri, 30 Jan 2026 09:55:17 -0500 Subject: [PATCH] Remove spacecraft texture system and rendering --- docs/planning/rendering-cleanup-plan.md | 2 +- docs/rendering.md | 27 +++++------ src/renderer.cpp | 62 ------------------------- src/renderer.h | 6 --- 4 files changed, 12 insertions(+), 85 deletions(-) diff --git a/docs/planning/rendering-cleanup-plan.md b/docs/planning/rendering-cleanup-plan.md index 9fed523..abbf95c 100644 --- a/docs/planning/rendering-cleanup-plan.md +++ b/docs/planning/rendering-cleanup-plan.md @@ -25,7 +25,7 @@ The renderer has several inefficiencies: - Update docs/technical_reference.md if it references texture loading behavior - **PAUSE** for user review -### Step 3: Remove Spacecraft Texture System +### Step 3: Remove Spacecraft Texture System [COMPLETED] Remove all spacecraft texture-related code: - From RenderState struct (renderer.h:19): `Texture2D spacecraft_texture;` - From renderer.cpp: diff --git a/docs/rendering.md b/docs/rendering.md index b441cbc..89aeeaf 100644 --- a/docs/rendering.md +++ b/docs/rendering.md @@ -111,13 +111,11 @@ Uses linear scaling for consistent representation at all scales. ### Spacecraft **Rendering:** -- Screen-space 2D overlay using `DrawTexturePro()` -- Constant screen size: 40 pixels (independent of camera zoom) -- Cyan color (0, 255, 255) -- Rotated to face velocity direction -- Off-screen culling (skips rendering if outside viewport) +- Only visible via child indicators when parent body is selected +- No separate 3D or screen-space rendering +- Orbits rendered as cyan (0, 255, 255) lines -**Purpose:** UI indicator for spacecraft that remains visible at all zoom levels +**Purpose:** Spacecraft are tracked via orbit paths and child indicators only ### Maneuver Markers **Rendering:** @@ -135,7 +133,7 @@ Uses linear scaling for consistent representation at all scales. - RADIAL_OUT: Cyan (0, 255, 255) - CUSTOM: White (255, 255, 255) -**Render Order:** Top layer, after spacecraft (rendered as 2D overlays after 3D scene) +**Render Order:** Top layer, rendered as 2D overlays after 3D scene ### Child Indicators Screen-space 2D overlays for children of selected body (similar to NASA Eyes). @@ -197,9 +195,8 @@ Screen-space 2D overlays for children of selected body (similar to NASA Eyes). 1. Reference grid 2. Orbit paths (for all bodies with parents) 3. Bodies -4. Spacecraft -5. Maneuver markers -6. Child indicators (screen-space overlays) +4. Maneuver markers +5. Child indicators (screen-space overlays) ### Relative Rendering @@ -285,17 +282,16 @@ When a spacecraft is selected: 3. **Draw Reference Grid**: Subtle gray grid lines 4. **Render Orbit Paths**: Calculate and draw all orbits 5. **Render Bodies**: Draw all celestial bodies -6. **Render Spacecraft**: Draw all spacecraft -7. **Render Maneuver Markers**: Draw pending maneuver indicators -8. **EndMode3D**: Exit 3D rendering -9. **Render UI Panels**: Draw all raygui panels +6. **Render Maneuver Markers**: Draw pending maneuver indicators +7. **EndMode3D**: Exit 3D rendering +8. **Render UI Panels**: Draw all raygui panels +9. **Render Child Indicators**: Draw child overlays 10. **EndDrawing**: Complete frame ### Performance Considerations - 60 FPS target - Wireframe rendering for faster performance - Minimum visible size prevents tiny bodies -- Fixed spacecraft marker size for visibility at distance - Clipped orbit segments to avoid infinite paths ## Module Functions @@ -313,7 +309,6 @@ When a spacecraft is selected: #### Rendering - `render_body(body, render_state)` - Draw single celestial body -- `render_spacecraft_screen_space(craft, render_state)` - Draw spacecraft marker as 2D overlay - `render_maneuver_marker_screen_space(craft, maneuver, render_state)` - Draw burn indicator as 2D overlay - `render_simulation(sim, render_state)` - Full scene rendering (3D + 2D overlays) diff --git a/src/renderer.cpp b/src/renderer.cpp index a6ea343..4705b4e 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -100,7 +100,6 @@ void init_renderer(int width, int height, const char* title) { // Close raylib void close_renderer(RenderState* render_state) { if (render_state->texture_loaded) { - UnloadTexture(render_state->spacecraft_texture); for (int i = 0; i < 6; i++) { UnloadTexture(render_state->maneuver_textures[i]); } @@ -109,20 +108,6 @@ void close_renderer(RenderState* render_state) { CloseWindow(); } -Texture2D generate_spacecraft_texture() { - Image img = GenImageColor(64, 64, BLANK); - - ImageDrawCircle(&img, 32, 32, 28, (Color){0, 255, 255, 255}); - ImageDrawLine(&img, 32, 10, 32, 50, (Color){0, 0, 0, 255}); - ImageDrawLine(&img, 32, 10, 25, 17, (Color){0, 0, 0, 255}); - ImageDrawLine(&img, 32, 10, 39, 17, (Color){0, 0, 0, 255}); - - Texture2D tex = LoadTextureFromImage(img); - UnloadImage(img); - - return tex; -} - Texture2D generate_maneuver_marker_texture(Color color) { Image img = GenImageColor(32, 32, BLANK); @@ -141,8 +126,6 @@ Texture2D generate_maneuver_marker_texture(Color color) { void ensure_textures_loaded(RenderState* render_state) { if (render_state->texture_loaded) return; - render_state->spacecraft_texture = generate_spacecraft_texture(); - render_state->maneuver_textures[0] = generate_maneuver_marker_texture((Color){0, 255, 0, 200}); render_state->maneuver_textures[1] = generate_maneuver_marker_texture((Color){255, 0, 0, 200}); render_state->maneuver_textures[2] = generate_maneuver_marker_texture((Color){255, 255, 0, 200}); @@ -153,16 +136,6 @@ void ensure_textures_loaded(RenderState* render_state) { render_state->texture_loaded = true; } -float calculate_spacecraft_angle(Vec3 velocity, Camera3D camera) { - if (vec3_magnitude(velocity) < 0.01) return 0.0f; - - Vector3 render_vel = sim_to_render(velocity, 1.0); - Vector2 vel_2d = (Vector2){render_vel.x, render_vel.z}; - Vector2 cam_2d = (Vector2){camera.position.x, camera.position.z}; - - return Vector2Angle(vel_2d, cam_2d); -} - // Setup the 3D camera void setup_camera(RenderState* render_state) { render_state->camera.position = (Vector3){ 0.0f, CAMERA_INITIAL_POSITION_Y, CAMERA_INITIAL_POSITION_Z }; @@ -175,7 +148,6 @@ void setup_camera(RenderState* render_state) { render_state->size_scale = SIZE_SCALE_DEFAULT; render_state->texture_loaded = false; - render_state->spacecraft_texture = (Texture2D){0, 0, 0, 0, 0}; for (int i = 0; i < 6; i++) { render_state->maneuver_textures[i] = (Texture2D){0, 0, 0, 0, 0}; } @@ -372,35 +344,6 @@ void render_body(CelestialBody* body, RenderState* render_state) { DrawSphereWires(position, radius, 16, 16, color); } -void render_spacecraft_screen_space(Spacecraft* craft, RenderState* render_state) { - Vector3 render_pos = sim_to_render(craft->global_position, render_state->distance_scale); - Vector2 screen_pos = GetWorldToScreen(render_pos, render_state->camera); - - int screen_width = GetScreenWidth(); - int screen_height = GetScreenHeight(); - - if (screen_pos.x < -50 || screen_pos.x > screen_width + 50 || - screen_pos.y < -50 || screen_pos.y > screen_height + 50) { - return; - } - - float screen_size = 40.0f; - Color spacecraft_color = { 0, 255, 255, 255 }; - float angle = calculate_spacecraft_angle(craft->local_velocity, render_state->camera); - - Rectangle source = {0, 0, 64, 64}; - Rectangle dest = { - screen_pos.x - screen_size/2, - screen_pos.y - screen_size/2, - screen_size, - screen_size - }; - Vector2 origin = {screen_size/2, screen_size/2}; - - DrawTexturePro(render_state->spacecraft_texture, - source, dest, origin, angle, spacecraft_color); -} - void render_maneuver_marker_screen_space(Spacecraft* craft, Maneuver* maneuver, RenderState* render_state) { if (maneuver->executed) { return; @@ -689,11 +632,6 @@ void render_simulation(SimulationState* sim, RenderState* render_state) { EndMode3D(); - // Render spacecraft as screen-space overlays - for (int i = 0; i < sim->craft_count; i++) { - render_spacecraft_screen_space(&sim->spacecraft[i], render_state); - } - // Render maneuver markers as screen-space overlays for (int i = 0; i < sim->maneuver_count; i++) { Maneuver* maneuver = &sim->maneuvers[i]; diff --git a/src/renderer.h b/src/renderer.h index c464775..b287e26 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -16,7 +16,6 @@ struct RenderState { Vector3 camera_offset; // Offset from target when following body int last_target_index; // Tracks body index for change detection - Texture2D spacecraft_texture; // Shared texture for all spacecraft Texture2D maneuver_textures[6]; // One per burn direction bool texture_loaded; }; @@ -26,15 +25,11 @@ void init_renderer(int width, int height, const char* title); void close_renderer(RenderState* render_state); // Texture generation -Texture2D generate_spacecraft_texture(); Texture2D generate_maneuver_marker_texture(Color color); // Texture management void ensure_textures_loaded(RenderState* render_state); -// Angle calculation -float calculate_spacecraft_angle(Vec3 velocity, Camera3D camera); - // Camera setup and control void setup_camera(RenderState* render_state); void update_camera(RenderState* render_state, SimulationState* sim); @@ -42,7 +37,6 @@ float get_initial_camera_distance(CelestialBody* body, SimulationState* sim, Ren // Rendering functions void render_body(CelestialBody* body, RenderState* render_state); -void render_spacecraft_screen_space(Spacecraft* craft, RenderState* render_state); void render_maneuver_marker_screen_space(Spacecraft* craft, Maneuver* maneuver, RenderState* render_state); void render_orbit(Vec3 position, Vec3 velocity, Vec3 parent_position, double parent_mass, Color orbit_color, RenderState* render_state); Color get_body_orbit_color(CelestialBody* body);