← All work

CASE STUDY / C++ / PERLIN NOISE / VOXEL TERRAIN

Procedural Terrain / C++

A C++ learning project building voxel terrain from noise. Beyond the basic OpenGL setup, the source includes multi-scale terrain synthesis and an isometric rendering experiment.

3 layers
Separate continental, mountain, and detail scales
Seeded
Seeded permutation-table construction
C++
Public noise, generation, rendering, and profiling helpers

ROLE & CONSTRAINTS

The problem and my scope.

Solo project. C++ generation and rendering, using GLFW/GLAD for OpenGL and SFML for the isometric demo.

How can a generator provide separate controls for broad landforms, mountains, and fine detail?
C++OpenGLSFMLPerlin noisefBMMake

DESIGN DECISIONS / SOURCE EVIDENCE

Follow the implementation.

01

Compose multi-octave Perlin noise

Implement a seeded permutation table, gradients, interpolation, and octave accumulation. Combine continental, mountain, and detail bands with different frequencies and amplitudes, clamp heights, then assign block types.

src/terrain.cpp / PerlinNoise & generateTerrain ↗
02

Generate beyond the stored region

The isometric view can query blocks outside its stored terrain using matching seed and generation parameters. A PerlinNoise object is retained until the seed changes, avoiding reconstruction on each query. No measured speedup is claimed.

src/isometric_terrain.cpp / getBlockAtWorld ↗
03

Separate instrumentation from evidence

A profiler helper tracks FPS and elapsed time. Having instrumentation is different from publishing a controlled comparison: no common-condition benchmark dataset is currently included.

src/performance_profiler.h ↗

LIMITATIONS & NEXT QUESTION

Limits and the next question.

  • Reproducibility assumes the same implementation and environment. Cross-platform equality of C++ library shuffling has not been verified.
  • Generation alone does not establish traversability or playability. This project has no published navigation-based evaluation.
  • Rendering performance, memory use, and multi-seed quality comparisons are not published. This is a learning project, not a published research result.

I want to study how generation parameters affect reachability and path length, evaluating terrain and agent movement together. The new browser lab is a separate experiment toward that workflow.

REPRODUCTION / READING GUIDE

Inspect and reproduce.

Targets are taken from the public Makefile. The native setup needs macOS, clang++, GLFW/GLAD, SFML, GLM, and pkg-config as applicable. The browser demo is not a port of this C++ project.

make terrain
make run-terrain

# SFML isometric view
make isometric
make run-isometric

The case study refers to a fixed public source revision, README, and project logs inspected on November 1, 2026.

FROM SOURCE TO EXPERIMENT

Take the next step.

Try terrain generation × pathfinding ↗