Iterative mesh refinement based on the technique in
Give this some garbage mesh as input and it will automagically give you a nice uniformly subdivided mesh.
var refine = require('refine-mesh')
var bunny = require('bunny')
var normals = require('normals').vertexNormals(bunny.cells, bunny.positions)
//Refine the bunny from a base mesh to one with a uniform edge length of 0.1
var refined = refine(
bunny.cells,
bunny.positions,
normals,
{
edgeLength: 0.1
})
So, a coarse bunny mesh like this:
Becomes a fine mesh like this:
npm i refine-mesh
var mesh = require('refine-mesh')(cells, positions, normals[,options])
Applies iterative mesh refinement to a cell complex
cells
is an array of triples representing the faces of the meshpositions
is an array of [x,y,z]
triples representing the verticesnormals
is an array of [nx,ny,nz]
triples representing the normalsoptions
is an object with the following properties:
edgeLength
is the desired edge length (default is median edge length)maxIters
is the maximum number of iterations (default 5
)splitIters
maximum number of edge split iterations (default 10
)collapseIters
maximum number of edge collapse iterations (default 10
)flipIters
maximum number of edge flip iterations (default 10
)smoothIters
maximum number of smoothing iterations (default 20
)smoothRate
constant controlling rate of smoothing (default 0.95
)minSplit
minimum number of splits per iteration (default 0
)minCollapse
minimum number of collapse operations (default 0
)minFlip
minimum number of flip operations (default 0
)minSmooth
minimum smoothing improvement (default 0.01*edgeLength
)Returns An object with the following properties
cells
the faces of the resulting meshpositions
vertex positions of resultnormals
vertex normals of result(c) 2015 Mikola Lysenko. MIT License