Browse Source

Remove spacecraft texture system and rendering

main
cinnaboot 5 months ago
parent
commit
395537540c
  1. 2
      docs/planning/rendering-cleanup-plan.md
  2. 27
      docs/rendering.md
  3. 62
      src/renderer.cpp
  4. 6
      src/renderer.h

2
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:

27
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)

62
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];

6
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);

Loading…
Cancel
Save