Fast Mean-Curvature Flow via Finite-Elements Tracking
Computer Graphics Forum 2011 Paper
This distribution (part of the larger PoissonMesh package) provides a visualization of our finite-element tracking method for efficiently evolving surfaces under the action of mean-curvature flow.
EXECUTABLE ARGUMENTS (ElementFlow.exe)
- --in <input triangle mesh>
- This string is the the name of the mesh that is to be evolved. The file is assumed to be in PLY format.
- [--depth <maximum octree depth>]
This optional integer specifies the maximum depth of the tree that will be used for defining the finite-elements system. Running at depth d corresponds to solving on a voxel grid whose resolution is no larger than 2^d x 2^d x 2^d. The default value for this parameter is 8.
- [--iters <Gauss-Seidel iterations>]
This optional integer specifies the number of iterations of Gauss-Seidel relaxation that are to be performed at each level of the multigrid solver. The default value for this parameter is 2.
- [--stepSize <integration time-step>]
This optional floating point value specifies the time-step for each semi-implicit integration. If the value is positive, the time-step is relative to the geometry scaled down to a unit-cube. If it is negative, the time-step is relative to the original scale of the geometry. The default value for this parameter is 0.0001.
- [--subdivide <triangle subdivision iterations>]
This optional integer specifies the number of times the triangles of the mesh are to be subdivided. (Larger values results in a finer mesh, that more densely samples the reconstructed color functions, and more accurately captures the high-frequency detail, but requires more time and space for computation). The default value for this parameter is 0.
- [--threads <number of threads>]
This optional integer specifies the number of threads across which the solver should be parallelized. The default value for this parameter is the number of threads on the machine.
- If this optional argument is specified, the code outputs information about running and time and memory usage througout the processing.
- If this optional argument is specified, the code shows a progress bar for the different steps of the system set-up.
- If this optional argument is specified, the system is defined using second-order elements, which have larger support and therefore define a denser system with higher dimension. Otherwise, first-order elements are used.
- If this optional argument is specified, boundary edges of the mesh are locked during the flow.
- Esc: Quit
- Space: Pause/un-pause flow
- O: Write out mesh to disk
- e: Toggles edge mode
- t: Toggles triangle mode
- a and z: Rotates around the x-axis
- q and w: Rotates around the y-axis
- s and x: Rotates around the z-axis
- Page Up/Down: Zoom in and out
- Arrow keys: Move in the xy-plane
- Left mouse: Move in the xy-plane
- Left mouse+Shift: Rotate
- Left mouse+Alt: Zoom in and out
- The executable provided up was compiled for a 64-bit OS.
- The code was written using CUDA, glew, and glut, and requires the following DLLs to run.
- The source code is included as part of the larger, PoissonMesh, package. To generate the executable, only the Library and ElementFlow projects need to be compiled.
- The source code was compiled under MSVC 2008 for 64-bit compilation. If you have trouble loading the solution file, it's possible that the Cuda.rules files is not where it's expected to be. This can be fixed by editing the ElementFlow.vcproj file and pointing the compiler to the write location.
- Apparently, some compilers are choking on the link to cutil_math.h. If that is the case, moving it from the GUI directory to ElementFlow should address the problem.
- The compiler assumes that the environment variables CUDA_SDK_INC_PATH and CUDA_SDK_LAB_PATH have been set.