Isometric Projection
3D from 2D
Isometric projection created the illusion of three-dimensional space on 2D screens, enabling exploration games impossible with flat side-views.
Overview
Isometric projection displays three-dimensional scenes from a fixed angle where all three axes are equally foreshortened. On 8-bit computers, this created the impression of explorable 3D space while using only 2D sprite and tile techniques. Knight Lore, Marble Madness, and Solstice defined the look.
The mathematics
Standard isometric
True isometric uses ~30° angles:
- X-axis: 30° from horizontal
- Y-axis: 90° (vertical)
- Z-axis: 30° from horizontal (opposite direction)
Pixel isometric (2:1)
Games often used 2:1 ratio:
- For every 2 pixels horizontal, 1 pixel vertical
- Simpler maths for 8-bit processors
- Visually similar to true isometric
Coordinate conversion
Converting 3D to screen coordinates:
screen_x = (tile_x - tile_z) × tile_width / 2
screen_y = (tile_x + tile_z) × tile_height / 2 - height
Rendering order
Objects must be drawn back-to-front (painter’s algorithm):
for z from far to near:
for x from left to right:
draw_tile(x, z)
Or sort by depth:
depth = tile_x + tile_z
Collision detection
Separate world coordinates from screen:
- Store position in 3D (x, y, z)
- Calculate screen position for display
- Collide in 3D space, not screen space
The Filmation engine
Ultimate’s approach (Knight Lore):
| Feature | Implementation |
|---|---|
| Solid objects | Z-ordered sprite masking |
| Room-based | Each room calculated fresh |
| Object interaction | Physics in isometric space |
| Memory efficiency | Room data, not full map |
Tile-based isometric
Common in strategy games:
| Element | Structure |
|---|---|
| Ground tiles | Diamond-shaped |
| Objects | Placed at tile positions |
| Height | Stack tiles or offset |
Challenges
Depth sorting
Objects can overlap in complex ways:
- Characters moving between objects
- Multi-tile objects
- Different heights
Click detection
Converting screen clicks to tiles:
tile_x = (screen_x / (tile_width/2) + screen_y / (tile_height/2)) / 2
tile_z = (screen_y / (tile_height/2) - screen_x / (tile_width/2)) / 2
Movement
Eight-direction movement maps to 3D:
- “Up” moves toward back corner
- “Left” moves toward left corner
- Diagonal movement along axes
Notable games
| Game | Year | Platform |
|---|---|---|
| Zaxxon | 1982 | Arcade |
| Knight Lore | 1984 | Spectrum |
| Marble Madness | 1984 | Arcade |
| Batman | 1986 | Spectrum |
| Head Over Heels | 1987 | Spectrum |
| Solstice | 1990 | NES |
Modern use
Isometric persists in:
- City builders (SimCity 2000)
- Tactical RPGs (Final Fantasy Tactics)
- Action RPGs (Diablo)
- Indie games (Hades)