Demonstration code for Marching Cubes and Dual Contouring
Switch branches/tags
Nothing to show
Clone or download

This is demonstration code to accompany a series of articles on meshing. Please consult those articles for more details.

It covers how to implement 2d / 3d Marching Cubes and Dual Contouring.

There's also additional code to nicely render the results, but that is not polished for re-use.


Simply import one of marching_cubes_2d.marching_cubes_2d, marching_cubes_3d.marching_cubes_3d, dual_contour_2d.dual_contour_2d, dual_contour_3d.dual_contour_3d.

Each function takes an evaluation function, f, that determines whether a point is inside or outside by returning a positive or negative number. The Dual Contouring functions take an additional argument, f_normal, that returns the gradient as a V2 or V3 object. You can optionally pass the range of values to evaluate f over. The cell size is always 1.

The 2d meshing functions return a unordered list of common.Edge objects, the 3d ones return a utils_3d.Mesh object.