This is a maintained fork of Subdivide 2.0 from the Media Research Lab at NYU.
It is meant as companion code to the following paper:
H. Biermann, A. Levin, D. Zorin.
Piecewise smooth subdivision surfaces with normal control.
SIGGRAPH 2000 Conference Proceedings.
The improvements contributed here include:
- build support for Linux and macOS
- compatibility with modern C++ compilers: Clang and GCC
- conformance with C++11
- reformatted with a modern C++ style and readability in mind
- Markdown-ified README files
Complex geometrical features:
Normal interpolation:
Precise surface manipulation at corners:
The following platforms are currently supported:
- Linux (Ubuntu)
- macOS
Support for Windows is coming soon!
Each platform has a corresponding Makefile.$PLATFORM
inside the subdivide
directory.
For example, to build for macOS, execute the following command:
make -C subdivide -f Makefile.macos
The build process creates the following outputs:
subdivide/examples/ccsub
: Catmull-Clark subdivision tool (CLI).subdivide/examples/loopsub
: Loop subdivision tool (CLI).subdivide/examples/subviewer
: Visual subdivision app (GUI).
All three executables print information about their usage when invoked without arguments.
The subviewer
GUI app's controls are as follows:
<space>
: toggle control mode betweenmove
/pick
- in
move
mode, dragging with the pointer changes the orientation - in
pick
mode: clicking on a control mesh entity toggles its tag- edge tags:
smooth
/crease
- (boundary) vertex tags:
crease
/corner
- edge tags:
- in
S
: increase subdivision depth (number of iterations)W
: write control mesh to fileD
: write subdivided mesh to file