2026-06-07 09:04:03 -07:00
2026-06-07 09:04:03 -07:00
2026-06-17 10:35:08 -07:00
2026-06-07 09:04:03 -07:00
2026-06-17 09:45:23 -07:00
2026-06-17 10:35:08 -07:00
2026-06-07 09:04:03 -07:00

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

mkdir -p build && cd build
cmake ..
make -j$(nproc)

The executable is build/radar_simulator.

Running

# 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.

Description
Modular approach for a radar exhibit project
Readme MIT 13 MiB
Languages
C 77.7%
C++ 21.3%
GLSL 0.8%
CMake 0.2%