# radar-simulator Museum exhibit software simulating 1940s–1960s vintage radar systems. ## Project overview This application runs as a full-screen interactive exhibit on a Geekom A8 Max (AMD Ryzen 9 8945HS, Radeon 780M GPU, Ubuntu 25.10). Visitors can explore four historical radar types by cycling through a selection screen and interacting with keyboard controls. **Four radar displays:** | # | Name | Type | Location | |---|------|------|----------| | 1 | Chain Home | A-scope (WWII, 1940s) | RAF Ventnor, Isle of Wight | | 2 | Marine A-Scope | A-scope (pre-PPI, manually steered dish) | Community Boating Center, Bellingham Bay WA | | 3 | Marine Traffic Control | PPI scope | Center of Bellingham Bay WA | | 4 | Police Boat | PPI scope (moving platform) | Taylor Dock / Boulevard Park, Bellingham Bay WA | ## Tech stack - **Language:** C++20 - **Graphics:** OpenGL 4.3 Core, GLFW, GLAD - **Text:** FreeType 2 - **Maps/LIDAR:** GDAL (libgdal-dev) - **Database:** PostgreSQL (database: radar, user: radar) - **Build:** CMake ## Build ```bash mkdir -p build && cd build cmake .. make -j$(nproc) ``` The executable is `build/radar_simulator`. ## Running ```bash # All four radars available ./radar_simulator # Specific radars only ./radar_simulator chain_home marine_ascope ./radar_simulator marine_traffic police_boat ``` If only one radar is specified, it auto-activates after 5 seconds. ## Screen layout The window is 1920×1080 and is divided into three areas: - **Left text panel** (upper-left, 500 px wide): radar description and keyboard controls - **Status bar** (lower-left, 500×250 px): current control values in yellow - **Scope** (right side, square, full height): radar display ## Keyboard controls | Key | Action | |-----|--------| | **1** | Step forward in radar selection (or return to selection when operating) | | **2** | Step backward in radar selection | | **ENTER** | Activate selected radar | | **ESC** | Exit | | **3 / 4** | Intensity lower / higher | | **5 / 6** | Receiver sensitivity lower / higher | | **Q / W** | STC sensitivity lower / higher | | **E / R** | STC range lower / higher | | **T / Y** | Rain noise filter lower / higher (PPI scopes only) | | **U / I** | Radiogoniometer left / right (Chain Home only) | | **O / P** | Max range step down / up (all except Chain Home) | | **A / S** | Range cursor lower / higher (PPI scopes only) | | **D / F** | Bearing cursor CCW / CW (PPI scopes only) | | **G / H** | Antenna rotation CCW / CW (Marine A-Scope only) | ## Component .md files Each component has a specification and status file: - `01_classes.md` — class hierarchy (RadarBase + 4 subclasses; stubs built) - `02_text_description.md` — text renderer and left-panel text content (complete) - `03_setup_and_radar_selection.md` — startup, selection loop, main render loop (complete) ## Current build state The initialization and radar-management infrastructure is complete: - Four stub radar subclasses render description text, keyboard control lists, and current control values in the status bar. - The scope area shows the radar name with a `[stub]` label — no actual radar simulation is drawn yet. - All keyboard controls update CPU globals; uniforms will be pushed to shaders as each scope component is built. Real radar scope rendering (sweep, targets, graticule, range rings/ticks, terrain, P7 phosphor persistence) will be added one radar at a time.