Files
modular-radar/README.md

101 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# radar-simulator
Museum exhibit software simulating 1940s1960s 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.