# goliasjr2/sistema_solar architecture

> Architecture diagram of the GitHub repository goliasjr2/sistema_solar, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-09). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/goliasjr2/sistema_solar
- Repository: https://github.com/goliasjr2/sistema_solar

## Overview

This is a Python/OpenGL 3D astronomy simulator. The main user workflow starts in the simulator: users navigate and select celestial objects, control simulated time and scale, and view the solar system and wider cosmic phenomena. A separate educational workflow presents planet-specific lessons through a virtual guide with speech, lip-sync, and animation. The graph covers the documented feature branches and the rendering layer; some subsystem links rely on the README or source index because their implementations were not excerpted.

Main entry points: [`main.py`](https://github.com/goliasjr2/sistema_solar/blob/main/main.py) (Simulator app), [`model_loader.py`](https://github.com/goliasjr2/sistema_solar/blob/main/model_loader.py) (Model loading), [`guide/guide_controller.py`](https://github.com/goliasjr2/sistema_solar/blob/main/guide/guide_controller.py) (Guide controller), [`planets.py`](https://github.com/goliasjr2/sistema_solar/blob/main/planets.py) (Planets and moons)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_sim["Simulation and navigation"]
  node_app["Simulator app<br/>[main.py]"]
  node_camera["Camera controls<br/>[camera.py]"]
  node_selection["Object picking<br/>[picking.py]"]
  node_scale["Scale transitions<br/>[scale_manager.py]"]
  node_hud["Help and data UI<br/>[ui.py]"]
end

subgraph group_cosmos["Cosmic objects"]
  node_solar["Planets and moons<br/>[planets.py]"]
  node_orbits["Orbital paths<br/>[orbits.py]"]
  node_asteroids["Asteroid belt<br/>[asteroids.py]"]
  node_comets["Comets<br/>[comet.py]"]
  node_meteors["Meteor showers<br/>[meteors.py]"]
  node_satellites["Artificial satellites<br/>[satellites.py]"]
  node_starfield["Star field<br/>[starfield.py]"]
  node_galaxy["Spiral galaxy<br/>[galaxy.py]"]
  node_blackholes["Black holes<br/>[blackhole.py]"]
end

subgraph group_guide["Educational guide"]
  node_virtual["Virtual guide facade<br/>[virtual_guide.py]"]
  node_controller["Guide controller"]
  node_lessons["Lesson manager<br/>[lesson_manager.py]"]
  node_content["Planet lesson content<br/>[planet_content.py]"]
  node_earthcontent["Earth lesson content<br/>[earth_content.py]"]
  node_tts["Speech synthesis<br/>[text_to_speech.py]"]
  node_audio["Audio playback<br/>[audio_player.py]"]
  node_lipsync["Lip sync<br/>[lip_sync.py]"]
  node_bodyanim["Body animation<br/>[guide_animation.py]"]
  node_faceanim["Facial animation"]
  node_guiderender["Guide renderer<br/>[guide_renderer.py]"]
end

subgraph group_render["Rendering foundations"]
  node_mesh["Mesh rendering<br/>[mesh.py]"]
  node_models["Model loading<br/>[model_loader.py]"]
  node_shader["Shader management<br/>[shader.py]"]
  node_texture["Texture management<br/>[texture.py]"]
end

node_user(("Simulator user"))

node_user -->|"controls"| node_app
node_app -->|"updates"| node_camera
node_app -->|"routes picking"| node_selection
node_app -->|"sets scale"| node_scale
node_app -->|"updates display"| node_hud
node_app -->|"manages system"| node_solar
node_app -->|"manages belt"| node_asteroids
node_app -->|"manages comets"| node_comets
node_app -->|"manages showers"| node_meteors
node_app -->|"manages satellites"| node_satellites
node_app -->|"toggles stars"| node_starfield
node_app -->|"toggles galaxy"| node_galaxy
node_app -->|"manages encounters"| node_blackholes
node_app -->|"opens guide"| node_virtual
node_scale -->|"transitions camera"| node_camera
node_scale -->|"sets galaxy scale"| node_galaxy
node_solar -->|"uses paths"| node_orbits
node_solar -->|"uses meshes"| node_mesh
node_solar -->|"loads models"| node_models
node_solar -->|"uses textures"| node_texture
node_solar -->|"uses shaders"| node_shader
node_asteroids -->|"loads models"| node_models
node_asteroids -->|"uses shaders"| node_shader
node_comets -->|"uses paths"| node_orbits
node_comets -->|"uses meshes"| node_mesh
node_comets -->|"loads models"| node_models
node_meteors -->|"loads models"| node_models
node_satellites -->|"loads models"| node_models
node_starfield -->|"uses shaders"| node_shader
node_galaxy -->|"loads models"| node_models
node_galaxy -->|"uses shaders"| node_shader
node_blackholes -->|"loads models"| node_models
node_blackholes -->|"uses shaders"| node_shader
node_virtual -->|"delegates to"| node_controller
node_virtual -->|"renders with"| node_guiderender
node_controller -->|"advances lesson"| node_lessons
node_controller -->|"synthesizes speech"| node_tts
node_controller -->|"plays speech"| node_audio
node_controller -->|"updates visemes"| node_lipsync
node_controller -->|"updates motion"| node_bodyanim
node_controller -->|"updates expression"| node_faceanim
node_lessons -->|"selects lessons"| node_content
node_lessons -->|"uses fallback"| node_earthcontent
node_faceanim -->|"consumes visemes"| node_lipsync
node_guiderender -->|"loads model"| node_models
node_guiderender -->|"binds textures"| node_texture
node_guiderender -->|"uses shader"| node_shader
node_models -->|"uses textures"| node_texture

click node_app "https://github.com/goliasjr2/sistema_solar/blob/main/main.py"
click node_camera "https://github.com/goliasjr2/sistema_solar/blob/main/camera.py"
click node_selection "https://github.com/goliasjr2/sistema_solar/blob/main/picking.py"
click node_scale "https://github.com/goliasjr2/sistema_solar/blob/main/scale_manager.py"
click node_hud "https://github.com/goliasjr2/sistema_solar/blob/main/ui.py"
click node_solar "https://github.com/goliasjr2/sistema_solar/blob/main/planets.py"
click node_orbits "https://github.com/goliasjr2/sistema_solar/blob/main/orbits.py"
click node_asteroids "https://github.com/goliasjr2/sistema_solar/blob/main/asteroids.py"
click node_comets "https://github.com/goliasjr2/sistema_solar/blob/main/comet.py"
click node_meteors "https://github.com/goliasjr2/sistema_solar/blob/main/meteors.py"
click node_satellites "https://github.com/goliasjr2/sistema_solar/blob/main/satellites.py"
click node_starfield "https://github.com/goliasjr2/sistema_solar/blob/main/starfield.py"
click node_galaxy "https://github.com/goliasjr2/sistema_solar/blob/main/galaxy.py"
click node_blackholes "https://github.com/goliasjr2/sistema_solar/blob/main/blackhole.py"
click node_virtual "https://github.com/goliasjr2/sistema_solar/blob/main/guide/virtual_guide.py"
click node_controller "https://github.com/goliasjr2/sistema_solar/blob/main/guide/guide_controller.py"
click node_lessons "https://github.com/goliasjr2/sistema_solar/blob/main/educational/lesson_manager.py"
click node_content "https://github.com/goliasjr2/sistema_solar/blob/main/educational/planet_content.py"
click node_earthcontent "https://github.com/goliasjr2/sistema_solar/blob/main/educational/earth_content.py"
click node_tts "https://github.com/goliasjr2/sistema_solar/blob/main/speech/text_to_speech.py"
click node_audio "https://github.com/goliasjr2/sistema_solar/blob/main/speech/audio_player.py"
click node_lipsync "https://github.com/goliasjr2/sistema_solar/blob/main/speech/lip_sync.py"
click node_bodyanim "https://github.com/goliasjr2/sistema_solar/blob/main/guide/guide_animation.py"
click node_faceanim "https://github.com/goliasjr2/sistema_solar/blob/main/guide/facial_animation.py"
click node_guiderender "https://github.com/goliasjr2/sistema_solar/blob/main/guide/guide_renderer.py"
click node_mesh "https://github.com/goliasjr2/sistema_solar/blob/main/mesh.py"
click node_models "https://github.com/goliasjr2/sistema_solar/blob/main/model_loader.py"
click node_shader "https://github.com/goliasjr2/sistema_solar/blob/main/shader.py"
click node_texture "https://github.com/goliasjr2/sistema_solar/blob/main/texture.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_camera,node_selection,node_scale,node_hud,node_user toneBlue
class node_solar,node_orbits,node_asteroids,node_comets,node_meteors,node_satellites,node_starfield,node_galaxy,node_blackholes toneAmber
class node_virtual,node_controller,node_lessons,node_content,node_earthcontent,node_tts,node_audio,node_lipsync,node_bodyanim,node_faceanim,node_guiderender toneMint
class node_mesh,node_models,node_shader,node_texture toneRose
```

## Components

### Simulation and navigation

- [Simulator app](https://github.com/goliasjr2/sistema_solar/blob/main/main.py): `main.py`
- [Camera controls](https://github.com/goliasjr2/sistema_solar/blob/main/camera.py): `camera.py`
- [Object picking](https://github.com/goliasjr2/sistema_solar/blob/main/picking.py): `picking.py`
- [Scale transitions](https://github.com/goliasjr2/sistema_solar/blob/main/scale_manager.py): `scale_manager.py`
- [Help and data UI](https://github.com/goliasjr2/sistema_solar/blob/main/ui.py): `ui.py`

### Cosmic objects

- [Planets and moons](https://github.com/goliasjr2/sistema_solar/blob/main/planets.py): `planets.py`
- [Orbital paths](https://github.com/goliasjr2/sistema_solar/blob/main/orbits.py): `orbits.py`
- [Asteroid belt](https://github.com/goliasjr2/sistema_solar/blob/main/asteroids.py): `asteroids.py`
- [Comets](https://github.com/goliasjr2/sistema_solar/blob/main/comet.py): `comet.py`
- [Meteor showers](https://github.com/goliasjr2/sistema_solar/blob/main/meteors.py): `meteors.py`
- [Artificial satellites](https://github.com/goliasjr2/sistema_solar/blob/main/satellites.py): `satellites.py`
- [Star field](https://github.com/goliasjr2/sistema_solar/blob/main/starfield.py): `starfield.py`
- [Spiral galaxy](https://github.com/goliasjr2/sistema_solar/blob/main/galaxy.py): `galaxy.py`
- [Black holes](https://github.com/goliasjr2/sistema_solar/blob/main/blackhole.py): `blackhole.py`

### Educational guide

- [Virtual guide facade](https://github.com/goliasjr2/sistema_solar/blob/main/guide/virtual_guide.py): `guide/virtual_guide.py`
- [Guide controller](https://github.com/goliasjr2/sistema_solar/blob/main/guide/guide_controller.py): `guide/guide_controller.py`
- [Lesson manager](https://github.com/goliasjr2/sistema_solar/blob/main/educational/lesson_manager.py): `educational/lesson_manager.py`
- [Planet lesson content](https://github.com/goliasjr2/sistema_solar/blob/main/educational/planet_content.py): `educational/planet_content.py`
- [Earth lesson content](https://github.com/goliasjr2/sistema_solar/blob/main/educational/earth_content.py): `educational/earth_content.py`
- [Speech synthesis](https://github.com/goliasjr2/sistema_solar/blob/main/speech/text_to_speech.py): `speech/text_to_speech.py`
- [Audio playback](https://github.com/goliasjr2/sistema_solar/blob/main/speech/audio_player.py): `speech/audio_player.py`
- [Lip sync](https://github.com/goliasjr2/sistema_solar/blob/main/speech/lip_sync.py): `speech/lip_sync.py`
- [Body animation](https://github.com/goliasjr2/sistema_solar/blob/main/guide/guide_animation.py): `guide/guide_animation.py`
- [Facial animation](https://github.com/goliasjr2/sistema_solar/blob/main/guide/facial_animation.py): `guide/facial_animation.py`
- [Guide renderer](https://github.com/goliasjr2/sistema_solar/blob/main/guide/guide_renderer.py): `guide/guide_renderer.py`

### Rendering foundations

- [Mesh rendering](https://github.com/goliasjr2/sistema_solar/blob/main/mesh.py): `mesh.py`
- [Model loading](https://github.com/goliasjr2/sistema_solar/blob/main/model_loader.py): `model_loader.py`
- [Shader management](https://github.com/goliasjr2/sistema_solar/blob/main/shader.py): `shader.py`
- [Texture management](https://github.com/goliasjr2/sistema_solar/blob/main/texture.py): `texture.py`

### Other components

- **Simulator user**

## Connections

- Simulator user → Simulator app: controls
- Simulator app → Camera controls: updates (evidence: `main.py`)
- Simulator app → Object picking: routes picking (evidence: `main.py`)
- Simulator app → Scale transitions: sets scale (evidence: `main.py`)
- Simulator app → Help and data UI: updates display (evidence: `main.py`)
- Simulator app → Planets and moons: manages system (evidence: `main.py`)
- Simulator app → Asteroid belt: manages belt (evidence: `main.py`)
- Simulator app → Comets: manages comets (evidence: `main.py`)
- Simulator app → Meteor showers: manages showers (evidence: `main.py`)
- Simulator app → Artificial satellites: manages satellites (evidence: `main.py`)
- Simulator app → Star field: toggles stars (evidence: `main.py`)
- Simulator app → Spiral galaxy: toggles galaxy (evidence: `main.py`)
- Simulator app → Black holes: manages encounters (evidence: `main.py`)
- Simulator app → Virtual guide facade: opens guide (evidence: `main.py`)
- Scale transitions → Camera controls: transitions camera (evidence: `scale_manager.py`)
- Scale transitions → Spiral galaxy: sets galaxy scale (evidence: `scale_manager.py`)
- Planets and moons → Orbital paths: uses paths (evidence: `planets.py`)
- Planets and moons → Mesh rendering: uses meshes (evidence: `planets.py`)
- Planets and moons → Model loading: loads models (evidence: `planets.py`)
- Planets and moons → Texture management: uses textures (evidence: `planets.py`)
- Planets and moons → Shader management: uses shaders (evidence: `planets.py`)
- Asteroid belt → Model loading: loads models (evidence: `asteroids.py`)
- Asteroid belt → Shader management: uses shaders (evidence: `asteroids.py`)
- Comets → Orbital paths: uses paths (evidence: `comet.py`)
- Comets → Mesh rendering: uses meshes (evidence: `comet.py`)
- Comets → Model loading: loads models (evidence: `comet.py`)
- Meteor showers → Model loading: loads models (evidence: `meteors.py`)
- Artificial satellites → Model loading: loads models (evidence: `satellites.py`)
- Star field → Shader management: uses shaders (evidence: `starfield.py`)
- Spiral galaxy → Model loading: loads models (evidence: `galaxy.py`)
- Spiral galaxy → Shader management: uses shaders (evidence: `galaxy.py`)
- Black holes → Model loading: loads models (evidence: `blackhole.py`)
- Black holes → Shader management: uses shaders (evidence: `blackhole.py`)
- Virtual guide facade → Guide controller: delegates to (evidence: `guide/virtual_guide.py`)
- Virtual guide facade → Guide renderer: renders with (evidence: `guide/virtual_guide.py`)
- Guide controller → Lesson manager: advances lesson (evidence: `guide/guide_controller.py`)
- Guide controller → Speech synthesis: synthesizes speech (evidence: `guide/guide_controller.py`)
- Guide controller → Audio playback: plays speech (evidence: `guide/guide_controller.py`)
- Guide controller → Lip sync: updates visemes (evidence: `guide/guide_controller.py`)
- Guide controller → Body animation: updates motion (evidence: `guide/guide_controller.py`)
- Guide controller → Facial animation: updates expression (evidence: `guide/guide_controller.py`)
- Lesson manager → Planet lesson content: selects lessons (evidence: `educational/lesson_manager.py`)
- Lesson manager → Earth lesson content: uses fallback (evidence: `educational/lesson_manager.py`)
- Facial animation → Lip sync: consumes visemes (evidence: `guide/facial_animation.py`)
- Guide renderer → Model loading: loads model (evidence: `guide/guide_renderer.py`)
- Guide renderer → Texture management: binds textures (evidence: `guide/guide_renderer.py`)
- Guide renderer → Shader management: uses shader (evidence: `guide/guide_renderer.py`)
- Model loading → Texture management: uses textures (evidence: `model_loader.py`)
