C99 heightmap utilities.
This toy project is a tiny MIT-licensed C library of image utilities for dealing with height maps, normal maps, distance fields, and the like. It has a very low-level API, where an "image" is simply a flat array of floats. There are no dependencies and only one header file.
Heman can do stuff like this:
Heman implements some really nice 21st-century algorithms:
The images at the top were generated from code that looks like this:
// Generate an island shape using simplex noise and a distance field.
heman_image* elevation = heman_generate_island_heightmap(1024, 1024, rand());
// Compute ambient occlusion from the height map.
heman_image* occ = heman_lighting_compute_occlusion(elevation);
// Visualize the normal vectors.
heman_image* normals = heman_lighting_compute_normals(elevation);
// Apply a color gradient.
heman_image* gradient = heman_color_create_gradient(...);
heman_image* albedo = heman_color_apply_gradient(elevation, -0.5, 0.5, grad);
// Apply diffuse lighting.
heman_image* final = heman_lighting_apply(elevation, albedo, ...);
For the unabridged version, see test_lighting()
in
test/test_heman.c.
curl -L -O https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.0/openmp-12.0.0.src.tar.xz
tar -xvf openmp-12.0.0.src.tar.xz ; rm openmp-12.0.0.src.tar.xz
cd openmp-12.0.0.src
cmake . -DLIBOMP_ENABLE_SHARED=OFF -DLIBOMP_INSTALL_ALIASES=OFF -DCMAKE_OSX_ARCHITECTURES=x86_64
sudo make install