Home

Awesome

3d-quickhull

Header only 3d quickhull in ANSI C

Usage

To use this library, simply include quickhull.h once with the QUICKHULL_IMPLEMENTATION define in a .cpp file.

#define QUICKHULL_IMPLEMENTATION
#include "quickhull.h"

The usage of the library is quite simple, generate or gather a set of points, and call qh_quickhull3d. The result is a mesh with a set of indexed normals and vertices ready to upload in a GPU.

const int n = 100;
qh_vertex_t vertices[n];

for (int i = 0; i < n; ++i) {
    float a0 = (rand_0_1() * M_PI * 2);
    float a1 = (rand_0_1() * M_PI * 2);
    vertices[i].z = sin(a0) * radius;
    vertices[i].x = cos(a1) * cos(a0) * rand_0_1();
    vertices[i].y = sin(a1) * cos(a0) * rand_0_1();
}

qh_mesh_t mesh = qh_quickhull3d(vertices, n);

// ...

qh_free_mesh(mesh);

Example

If you're interested in low-polygon rendering, using quickhull as a base for mesh triangulation can give such results: